CS学习顺序表
WhYqZz顺序表的概念
用一组地址连续的存储单元依次存储数据元素的线性表叫做顺序表
特点:逻辑上相邻的数据元素,其物理次序也是相邻的
顺序表的定义
静态
1 2 3 4 5 6 7
| #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIEZE]; int length; }Sqlist;
|
动态
1 2 3 4 5 6 7
| #include<stdio.h> #define INITSIZE 100 typedef struct{ int *data; int Maxsize; int length; }Seqlist;
|
顺序表的初始化
静态
1 2 3 4 5 6
| void Initlist(Sqlist &L){ for(int i=0;i<MAXSIZE;i++){ L.data[i]=0; } L.length=0; }
|
动态
1 2 3 4
| void Initlist(Seqlist &L){ L.data=(int *)malloc(sizeof(int)*INITSIZE); L.length=0; }
|
- 增加长度
1 2 3 4 5 6 7 8 9
| void IncreaseSize(Seqlist &L,int len){ int *p=L.data; L.data=(int *)malloc(sizeof(int)*(MAXSIZE+len)); for(int i=0;i<MAXSIZE;i++){ L.data[i]=p[i]; } L.MaxSIze=L.MaxSize+len; free(p); }
|

顺序表的插入
ListInsert(&L,i,e)
在表L的第i个位置插入e
时间复杂度O(n)
静态
1 2 3 4 5 6 7 8 9 10
| bool ListInsert(Sqlist &L,int i,int e){ if(i>L.length+1||i<1)return false; if(length>=MAXSIZE)return false; for(int j=L.length;j>=i;j--){ L.data[j]=L.data[j-1] } L.data[i-1]=e; L.length++; return true; }
|
动态
1 2 3 4 5 6 7 8 9 10
| bool ListInsert(Seqlist &L,int i,int e){ if(i>L.length+1||i<1)return false; if(length>=MAXSIZE)return false; for(int j=length;j<=i;j--){ L.data[j]=L.data[j-1]; } L.data[i-1]=e; L.length++; return true; }
|
顺序表的删除
时间复杂度O(n)
静态
1 2 3 4 5 6 7 8 9
| bool ListDelete(Sqlist &L,int i,int &e){ if(i<1||i>length)return false; e=L.data[i-1]; for(int j=i;j<length;j++){ L.data[j-1]=L.data[j]; } L.length--; return true; }
|
动态
1 2 3 4 5 6 7 8 9
| bool ListDelete(Seqlist &L,int i,int &e){ if(i<1||i>length)return false; e=L.data[i-1]; for(int j=i;j<length;j++){ L.data[j-1]=L.data[j]; } L.length--; return true; }
|
