链表之顺序存储

2018-01-18 10:43:34 浏览数 (1)

顺序存储优点:

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 }

运行结果

0 人点赞