顺序存储优点:
1 不用额外增加新的节点空间
2 可以快速读取任意位置的元素
顺序存储缺点:
1 插入和删除需要移动大量元素
2 长度变化较大时,难以估计长度
3 存储空间碎片化
读取时,时间复杂度为O(1);
插入或删除时,时间复杂度为O(n);
实例代码
1 /*Edit by Xhalo*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 #define MAXSIZE 20 6 7 typedef struct seqList{ 8 int data[MAXSIZE]; 9 int length; 10 }SL; 11 12 13 int initElem(SL *L,int len); 14 void showElem(SL *L); 15 int getElem(SL *L,int n); 16 int insertElem(SL *L,int n,int num); 17 int deleteElem(SL *L,int n); 18 19 int main() 20 { 21 SL * L = (SL *)malloc(sizeof(SL)); 22 /*初始化链表*/ 23 if(initElem(L,10)) 24 return -1; 25 showElem(L); 26 /*查找指定的元素*/ 27 printf("the first number is %d\n",getElem(L,1)); 28 /*插入指定位置的元素*/ 29 if(insertElem(L,4,100)) 30 return -1; 31 showElem(L); 32 /*删除指定位置的元素*/ 33 if(deleteElem(L,5)) 34 return -1; 35 showElem(L); 36 return 0; 37 } 38 int initElem(SL *L,int len){ 39 int i; 40 for(i=0;i<len;i++){ 41 L->data[i]=i*2+1; 42 } 43 L->length = len; 44 return 0; 45 } 46 47 void showElem(SL *L){ 48 int len=L->length; 49 int i; 50 for(i=0;i<len;i++){ 51 printf("%d ",L->data[i]); 52 } 53 printf("\n"); 54 } 55 56 int getElem(SL *L,int n){ 57 if(L->length == 0 || n<0 || n>L->length) 58 printf("get List number error!"); 59 return L->data[n-1]; 60 } 61 62 int insertElem(SL *L,int n,int num){ 63 int i; 64 if(n>L->length) 65 return 1; 66 if(n<1 || n>L->length+1) 67 return 1; 68 if(n <= L->length){ 69 for(i=L->length-1;i>=n-1;i--) 70 L->data[i+1] = L->data[i]; 71 } 72 L->data[n-1]=num; 73 L->length++; 74 return 0; 75 } 76 int deleteElem(SL *L,int n){ 77 int i; 78 if(n>L->length) 79 return 1; 80 if(n<1 || n>L->length+1) 81 return 1; 82 if(n <= L->length){ 83 for(i=n-1;i<L->length;i++) 84 L->data[i] = L->data[i+1]; 85 } 86 L->length--; 87 return 0; 88 }