链表之顺序存储

简介:

顺序存储优点:

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 }
复制代码

运行结果

本文转自博客园xingoo的博客,原文链接:链表之顺序存储,如需转载请自行联系原博主。
相关文章
|
6月前
|
存储 算法 索引
线性表的顺序存储和链式存储
线性表的顺序存储和链式存储
52 0
|
9月前
|
算法
【数据结构和算法】认识线性表中的链表,并实现单向链表(下)
【数据结构和算法】认识线性表中的链表,并实现单向链表(下)
|
9月前
|
存储 算法
【数据结构和算法】认识线性表中的链表,并实现单向链表(上)
【数据结构和算法】认识线性表中的链表,并实现单向链表(上)
|
10月前
|
存储
线性表的链式存储——链表
线性表的链式存储——链表
124 0
|
11月前
|
存储 算法 C++
线性表和链表
线性表和链表
95 0
|
12月前
|
存储 人工智能 DataX
线性表的顺序存储实现
线性表的顺序存储实现
线性表的链式存储实现(带头结点)
线性表的链式存储实现(带头结点)
|
存储
顺序存储和链式存储
顺序存储和链式存储
391 0
|
存储 C++
线性表的顺序存储——顺序表
线性表的顺序存储——顺序表
133 2
线性表的顺序存储——顺序表
线性表的链表实现
线性表的链表实现
109 0