1.1顺序表的定义
(1)静态定义
#define MaxSize 100 typedef struct{ int data[MaxSize]; int length; }seqList;
(2)动态定义
#define InitSize 50 typedef struct{ int *data; int MaxSize,length; }seqList;
1.2顺序表的初始化
(1)静态初始化
void seqListInit(seqList *L) { L->length=0; }
(2)动态初始化
void seqListInit(seqList *L) { L->data=(int *)malloc(sizeof(int)*InitSize); if(!L->data) { printf("分配失败"); exit(0); } L->length=0; L->MaxSize=InitSize; }
1.3 顺序表的创建
(1)静态创建
int createList(seqList *L,int a[],int n) { int i; if(n>L->MaxSize) { printf("创建失败"); return 0; } //通过循环将数组元素全部遍历放入顺序表中 for(i=0;i<n;i++) { L->data[i]=a[i]; L->length++; } return 1; }
(2)动态创建
//动态创建 int createList(seqList *L,int a[],int n) { //首次检查是否超出存储范围 if(n>L->MaxSize) { //分配空间 int *newbase=(int *)malloc(sizeof(int)*(MaxSize+n)) if(newbase) { L->data==newbase; L->MaxSize+=n; } else { return 0; } } //通过循环将数组元素全部遍历放入顺序表中 for(i=0;i<n;i++) { L->data[i]=a[i]; } L->length=n; return 1; }
1.4 顺序表的插入
(1)静态插入
//顺序表的静态插入 int ListInsert(seqList *L,int i,int e) { int j //判断插入位置是否正确 if(i<1||i>L->length+1) { return 0; } //判断是否存储位置是否已满 if(L->MaxSize==L->length) { return 0; } for(j=L->length;j>i-1;j--) { L->data[j]=L->data[j-1]; } L->data[j]=e L->length++; return 1; }
(2)动态插入
//顺序表的静态插入 int ListInsert(seqList *L,int i,int e) { int j //判断插入位置是否正确 if(i<1||i>L->length+1) { return 0; } //判断是否存储位置是否已满 if(L->MaxSize==L->length) { int *newbase=(int *)malloc(sizeof(int)*(MaxSize+1)) if(newbase) { L->data==newbase; L->MaxSize+=1; } else { return 0; } } for(j=L->length;j>i-1;j--) { L->data[j]=L->data[j-1]; } L->data[j]=e L->length++; return 1; }
1.5 顺序表的删除
int ListDelete(seqList *L,int i,int *e) { //判断删除位置 if(i<1||i>L->length) return 0; *e=L-data[i-1]; int j; for(j=i;j<L->length;j++) { L->data[j-1]=l->data[j]; } L->length--; return 1; }
1.6 顺序表的查找
int getList(seqList L,int i) { if(i<1||i>L.length) return 0; else return L->data[i-1]; }