数据结构—线性表之顺序表的操作
2013-06-27 16:27
387 查看
数据结构中,线性表之顺序表的操作,包括初始化、创建顺序表、插入,删除,查找
#include <stdio.h> #include <stdlib.h> /** * @brief 线性表的顺序存储结构,在存、读数据时不管是哪个位置,时间复杂度都为O(1) * 而插入或删除时,时间复杂度为O(n) * 比较适合元素个数不太变化,而更多是存取数据的应用 */ //顺序表的结构定义 #define MAXSIZE 10 typedef struct { int data[MAXSIZE]; //数组长度是存放线性表的存储空间的长度,存储分配后这个量是不变的 int length; //线性表的长度是线性表中数据元素的个数,随插入和删除操作,量会变化 }Sqlist; /** * @brief 初始化顺序表 */ void initList(Sqlist *L) { int i; for ( i = 0; i < MAXSIZE; ++i ) { L->data[i] = 0; } L->length = 0; } /** * @brief 创建顺序表 */ void createList(Sqlist *L) { int i; L->length = 5; //线性表中数据元素的个数为5 int element[5] = { 1, 2, 3, 4, 5 }; for ( i = 0; i < L->length; ++i ) { L->data[i] = element[i]; //把数组元素依次赋值给 线性表 } } /** * @brief 获取元素操作 */ int getElement(Sqlist *L, int i, int *e) { if ( L->length == 0 || i < 1 || i > L->length ) return 0; *e = L->data[i - 1]; return 1; } /** * @brief 在L中第i个位置之前插入新的数据元素e,L的长度加1 */ int insertList(Sqlist *L, int i, int e)//因为L本身要发生改变,这里用引用型 { int j; if ( L->length == MAXSIZE || i < 1 || i > L->length + 1 ) return 0; if ( i <= L->length ) {//若插入的数据位置不在表尾 for ( j = L->length; j >= i; --j ) L->data[j] = L->data[j - 1]; } //printf("enter!\n"); L->data[i - 1] = e; L->length++; return 1; } /** * @brief 删除L中第i个数据元素,并用e返回其值,L的长度减1 */ int deleteList(Sqlist *L, int i, int *e) { int j; if ( i < 1 || i > L->length ) return 0; if ( i <= L->length ) {//若删除的数据位置不在表尾 for ( j = i - 1; j <= L->length - 1; ++j ) { L->data[j] = L->data[j + 1]; } } *e = L->data[i - 1]; L->length--; return 1; } /** * @brief 找出顺序表里面与给定参数相同的元素的位置 * @param e为要找的数据元素 */ int locatePos(Sqlist *L, int e) { int i; for ( i = 0; i < L->length; ++i ) { if ( L->data[i] == e ) return i + 1; if ( i == L->length - 1 ) { printf("can't find!\n"); return -1; } } } /** * @brief 打印输出顺序表里面的数据 */ void printList(Sqlist *L) { int i; for ( i = 0; i < L->length; ++i ) { printf("%d ", L->data[i]); } printf("\n"); } int main() { int choice = 0; int postion = 0; int element = 0; int retval = 0; Sqlist *L = (Sqlist *)malloc(sizeof(Sqlist)); printf("1.init\n"); printf("2.creat\n"); printf("3.insert\n"); printf("4.delete\n"); printf("5.locate_value\n"); printf("6.locate_pos\n"); //printf("7.print\n"); printf("0.exit\n"); while ( 1 ) { printf("please input your choice:"); scanf("%d", &choice); switch ( choice ) { case 1 : initList(L); printList(L); //printf("enter!"); break; case 2 : createList(L); printList(L); break; case 3 : printf("the postion and element of insert:\n"); scanf("%d %d", &postion, &element); insertList(L, postion, element); printList(L); break; case 4 : printf("the postion of delete:\n"); scanf("%d", &postion); deleteList(L, postion, &element); //printf("the element of delete:%d", element); printList(L); break; case 5 : printf("the postion of searching elment:\n"); scanf("%d", &postion); getElement(L, postion, &element); printf("the element of search=%d\n", element); //printList(L); break; case 6 : printf("the element of find:"); scanf("%d", &element); retval = locatePos(L, element); printf("the postion of find element:%d\n", retval); break; //case 7 : printList(); break; case 0 : exit(0); } } free(L); }
相关文章推荐
- 数据结构--线性表的顺序表示及操作
- 数据结构中线性顺序表的基本操作(增删改查及合并)
- 数据结构系列-线性表的顺序存储及基本操作
- 数据结构-线性表的顺序存储实现及各种操作代码
- 数据结构---线性顺序表操作(c++)
- C/C++ 数据结构---线性顺序存储数据:查询快,增删慢
- 数据结构 - C语言版 - 顺序栈 所有基本操作
- 数据结构(2)线性表之顺序表
- 顺序表的简单操作(数据结构)
- 数据结构之顺序表的操作
- 顺序线性表的操作 (4人)
- 数据结构-线性表的顺序存储
- 数据结构初学者顺序表的操作(精简版)
- 【数据结构专题】线性表之顺序表
- 动态分配的顺序线性表的十五种操作—C语言实现
- 线性表之顺序表基本操作
- 《数据结构》实验二: 线性表综合实验——(1)顺序表
- 线性表_顺序存储/基本操作
- python实现线性表顺序存储的插入操作
- 数据结构--顺序表操作(C++版)