首页 > 代码库 > 数据结构-线性表之顺序存储结构
数据结构-线性表之顺序存储结构
一、线性表的顺序存储需要三个属性
1.存储空间的起始位置
2.线性表的最大存储容量
3.线性表的当前长度
二、线性表的时间复杂度:
线性表的顺序存储结构,在存、读数据时,不管是哪个位置,时间复杂度都是O(1); 插入删除的时间复杂度是O(n),所以线性表适合元素个数不太变化,而更多是存取数据的应用。
三、线性表的结构示意图:
四、代码示例:
/*我们的计量方式,除下标从0开始外,其余都从1开始算,所以只有在涉及访问数组的时候,要注意是否要+1 或-1*/ #include <stdio.h> #define MAXSIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FLASE 0 typedef struct { int No; int grade; } ElemType; typedef struct { ElemType data[MAXSIZE];//the max length of the list int length; }SqList; void InitList(SqList* L) { L->length = 0; } int GetElem(SqList* L,int i,ElemType* e) { if(L->length == 0 || i > L->length || i < 1) return ERROR; *e = L->data[i-1]; return OK; } int CreatList(SqList* L) { int i; printf("ready to create the list,please input the length\n"); scanf("%d",&L->length); if(L->length > MAXSIZE) fprintf(stderr,"out of memory!\n"); for(i = 0; i <= L->length - 1;i++) { printf("data %d= ",i+1); scanf("%d %d",&L->data[i].No,&L->data[i].grade); } } int InsertList(SqList*L,int i,ElemType* e) { int k; if(L->length == MAXSIZE) return ERROR; if(i < 1 || i > L->length + 1) return ERROR; if(i <= L->length) { for(k = L->length; k >= i; k--) { L->data[k] = L->data[k - 1]; } } L->data[i - 1] = *e; L->length++; return OK; } int DeleteList(SqList* L,int i) { int k; if(L == NULL || i > L->length) return ERROR; for(k = i; k <= L->length;k++ ) { L->data[k - 1] = L->data[k]; } L->length --; return OK; } void ShowList(SqList* L) { int i; for(i = 0; i <= L->length - 1;i++) { printf("%d %d \n",L->data[i].No,L->data[i].grade); } } int ListLength(SqList* L) { return L->length; } /*return the location(num) of the element*/ int LocateElem(SqList* L,ElemType* e) { int i,res; for(i = 0; i < L->length; i++) { if(L->data[i].No == e->No && L->data[i].grade == e->grade) res = i+1; else res = -1; } return res; } /*combine two lists,if the element in l2 is not existent in l1,insert the element into l1*/ void CombineList(SqList* L1,SqList* L2) { int L1_len,L2_len,i; ElemType e; L1_len = ListLength(L1); L2_len = ListLength(L2); for(i = 1; i <= L2_len;i++) { GetElem(L2,i,&e); if(LocateElem(L1,&e) == -1) { InsertList(L1,i,&e); } } } int main() { SqList L1; SqList L2; InitList(&L1); InitList(&L2); printf("SqList L1:\n"); CreatList(&L1); printf("SqList L2:\n"); CreatList(&L2); CombineList(&L1,&L2); ShowList(&L1); return 0; }结果示意:
数据结构-线性表之顺序存储结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。