C语言 顺序表 动态分配

数据结构 顺序表------动态分配

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define InitSize 10    //默认的最大长度 
 4 
 5 typedef struct{
 6     int *data;        //指示动态分配数组的指针 
 7     int MaxSize;    //顺序表的最大容量 
 8     int length;        //顺序表当前的长度 
 9 }SeqList; 
10 
11 //初始化顺序表 
12 void InitList(SeqList &L){
13     //用malloc函数申请一片连续的存储空间
14     L.data=(int *)malloc(InitSize*sizeof(int));
15     L.length=0;
16     L.MaxSize=InitSize;     
17 }
18 
19 //增加动态数组的长度
20 void IncreaseSize(SeqList &L,int len){
21     
22     int *p=L.data;
23     L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));    //len是要增加的长度 
24     for(int i=0; i<L.length; i++){
25         L.data[i]=p[i];                                    //将数据复制到新区域 
26     }
27     L.MaxSize=L.MaxSize+len;
28     free(p);                                            //释放原有的内存空间 
29 } 
30 
31 //插入操作    最好时间复杂度O(1)    最差时间复杂度O(n)    平均时间复杂度O(n) 
32 bool ListInsert(SeqList &L,int i,int e){
33     if(i<1||i>L.length+1)        //判断i的范围是否有效 
34         return false;
35     if(L.length>=L.MaxSize)        //判断当前存储空间是否已满 
36         return false;
37     for(int j=L.length; j>=i; j--)        //将第i个元素及之后的元素后移 
38         L.data[j]=L.data[j-1];
39     L.data[i-1]=e;                //在位置i处存放插入的数据e 
40     L.length++;                    //长度加一 
41     return true;
42 } 
43 
44 //删除操作     最好时间复杂度O(1)    最差时间复杂度O(n)    平均时间复杂度O(n) 
45 bool ListDelect(SeqList &L,int i,int & e){
46     
47     if(i<1||i>L.length)        //判断i的范围是否有效 
48         return false;
49     e=L.data[i-1];                //将被删除的元素赋值给e 
50     for(int j=i; j<L.length; j++)    //将第i个位置后的元素前移 
51         L.data[j-1]=L.data[j];
52     L.length--;                    //长度减一 
53     return true;
54     
55 }
56 
57 //按位查找
58 int GetElem(SeqList L,int i){
59     
60     if(i<1||i>L.length)        //判断i的范围是否有效 
61         return false;
62     return L.data[i-1];
63 } 
64 
65 //按值查找
66 int    LocateElem(SeqList L,int e){
67     
68     for(int i=0; i<L.length; i++){
69         if(L.data[i]==e)
70             return i+1; 
71     }
72     return 0;
73 } 
74 
75 int main(){
76     
77     return 0;
78 }

 

posted @ 2021-07-07 09:44  徐柿子  阅读(407)  评论(0)    收藏  举报