链表之顺序存储

顺序存储优点:

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 }

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值