顺序存储优点:
1 不用额外增加新的节点空间
2 可以快速读取任意位置的元素
顺序存储缺点:
1 插入和删除需要移动大量元素
2 长度变化较大时,难以估计长度
3 存储空间碎片化
读取时,时间复杂度为O(1);
插入或删除时,时间复杂度为O(n);
实例代码
代码语言:javascript复制 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 %dn",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 }