【数据结构】顺序存储结构线性表C语言版
发布时间:2020-12-15 06:06:07 所属栏目:安全 来源:网络整理
导读:【定义】线性表的顺序存储结构是指用一段地址连续的存储单元(就是数组)依次存储线性表的数据元素 【线性表的顺序存储结构代码】 #define MAXSIZE 50typedef int ElemType;typedef int Status;struct list{ int Elem[MAXSIZE]; int length;//这个长度是用过
【定义】线性表的顺序存储结构是指用一段地址连续的存储单元(就是数组)依次存储线性表的数据元素 【线性表的顺序存储结构代码】 #define MAXSIZE 50 typedef int ElemType; typedef int Status; struct list { int Elem[MAXSIZE]; int length;//这个长度是用过的数组的长度,也就是线性表的长度,区分数组的长度MAXSIZE }; typedef struct list List;一个这样的线性表的就是一个包含了数组和int类型的线性表长度的结构体,其中length值是一个从1到MAXSIZE的值,这个值会随着线性表的插入和删除而变化 【线性表的操作的函数代码】 /** *返回值为是否成功 **/ Status GetElem(List *L,int i,ElemType *e) { if(L->length <0||i < 0 || i > L->length) { return ERROR;//判断线性表是否存在,要查找的元素是否数组越界 } *e = L->Elem[i-1]; return OK; } /**在第i个位置之前上插入相应值,同时链表长度增加,这个插入不是将值替换*/ Status Listinsert(List *L,ElemType e)//链表,位置, { int k = L->length;//临时变量用来存放数组下标 if(L->length == MAXSIZE) //判断表是否是满的 { return ERROR; } if(i<0||i>L->length+1) //判断插入位置是否合理 { return ERROR; } if(i>0||i<=L->length)//插入的地方不是表尾 { for(k=L->length-1 ; k >=i-1; k--) { L->Elem[k+1] = L->Elem[k]; } } L->Elem[i-1]= e;//恰好是表尾的话就直接插入到这位置 L->length++; return OK; } Status ListDelete(List *L,int i) { int k; if(L->length == 0||i<0 ||i>L->length)//空表,删除位置是否合适的判断 return ERROR; for(k=i-1; k<L->length-1; k++) { L->Elem[k] = L->Elem[k+1]; } L->length--; return OK; } void getLlength(List *L) { printf("当前链表长度为%dn",L->length); }【测试用的主函数的代码】 int main() { List L = {{0},0}; int choose ; int i; int e; int j; while(1) { printf("***************************************************n"); printf("输入操作n"); printf("1.插入元素n"); printf("2.删除元素n"); printf("3.获取当前表长n"); printf("4.显示所有的元素值n"); printf("5.显示某位置的元素值n"); printf("***************************************************n"); scanf("%d",&choose); switch(choose) { case 1: printf("输入元素值和位置n"); scanf("%d %d",&e,&i); if(Listinsert(&L,i,e) == 0) { printf("errorn"); exit(0); } getLlength(&L); break; case 2: printf("输入位置n"); scanf("%d",&i); if(ListDelete(&L,i) == 0) { printf("errorn"); exit(0); } getLlength(&L); break; case 3: getLlength(&L); break; case 4: for(j = 0; j< L.length; j++) { printf("%d ",L.Elem[j]); } printf("n "); break; case 5: printf("输入元素位置n"); scanf("%d",&i); if(GetElem(&L,&e) == 0) { printf("errorn"); exit(0); } printf("当前的元素的为%dn",e); break; } } return 0; }【线性表的顺序存储结构的优缺点】 优点: 无须为表示表中的元素之间的逻辑关系而增加额外的存储空间,可以快速的存取表中的任意位置的元素 缺点:插入和删除操作需要移动大量的元素,线性表的长度变化较大的时候难以确定存储空间的容量,造成存储空间的“碎片” http://download.csdn.net/detail/u013583717/7999421 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |