嗯,直接用插入来建立线性表,不再先建表再插入了。
下面的所有函数都是放在单独的文件中,所以很多重合的。
目录
初始化函数:
//宏定义
#define OK 1
#define ERROR 0
//定义类型
typedef int Status;
//初始条件:无
//目的:对顺序表进行初始化
//过程:将传过来的线性表的长度置为0,给其分配数组空间。
Status InitList(Sqlist *L){
L->length=0;//将长度置为0
return 0;
}
GetElem函数:
//1.定义define,宏
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSR 0
//Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
//2.写getelem
Status GetElem(SqList L, int i, ElemType *e){
// 2.1初始条件:顺序线性表L已经存在不是空表,并且1<=i<ListLength(L)
if(L.length==0 || i>ListLength(L) || i<1){
return ERROR;
}
//2.2操作结果:用e返回L中第i个数据元素的值
*e=L.data[i-1];
return OK;
}
插入函数:
//宏定义
#define OK 1
#define ERROR 0
//定义返回类型
typedef int Status;
//1.写ListInsert函数
//2.参数:*L,i,e
Status ListInsert(SqList *L,int i,ElemType e){
// 3初始条件:该线性表还没有满,
// 插入的位置是在线性表已有长度内
if(L->length==MAXSIZE){
return ERROR;
}
if(i<1 || i>L->length+1){
return ERROR;
}
//4.操作结果:利用*L操作主函数中同一个地址,插入成功返回OK,失败返回ERROR
if(i<=L->length){//如果插入的位置不在表尾
for(int j=L->length-1;j>=i-1;j--){
L->data[j+1]=L->data[j];
}
}
L->data[i-1]=e;
L->length++;
return OK;
}
删除函数:
//宏定义
#define OK 1
#define ERROR 0
//定义返回类型
typedef int Status
//1.写函数DeleteList,
//2.参数为*L,i,*e;
//目的:删除L的第i个数据元素,并用e返回其值,L的长度-1;
Status DeleteList(SqList *L,int i,){
//3.初始条件:L存在不是空表,删除位置i位置合理,
if(L->length==0){
return ERROR;
}
if(i<1 || i>L->length){
return ERROR;
}
*e = L->data[i-1];
//4.操作过程:直接将删除位置后的数据逐个前移,并更改该L的长度
if(i<L->length){
for(int j=i;j<L->length;j++){
L->data[j-1]=L->data[j];
}
}
L->length--;
//5.操作结果: 正确返回OK,错误返回ERROR
return OK;
}
主函数:
#include<stdio.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
ElemType length;
}SqList;
ElemType main(){
SqList L;
void InitList(SqList *L);
InitList(&L);
printf("%d\n",L.length);
ElemType e;
void GetElem(SqList L, int i, ElemType *e);
void ListInsert(SqList *L,int i,ElemType e);
void DeleteList(SqList *L,int i,int *e);
GetElem(L,1, &e);
printf("%d\n",e);
ListInsert(&L,1,21);
ListInsert(&L,2,211);
ListInsert(&L,3,2111);
ListInsert(&L,4,21111);
ListInsert(&L,5,211111);
ListInsert(&L,6,2111111);
GetElem(L,1, &e);
printf("%d\n",e);
GetElem(L,2, &e);
printf("%d\n",e);
GetElem(L,3, &e);
printf("%d\n",e);
GetElem(L,4, &e);
printf("%d\n",e);
GetElem(L,5, &e);
printf("%d\n",e);
GetElem(L,6, &e);
printf("%d\n",e);
DeleteList(&L,6,&e);
printf("%d\n",e);
DeleteList(&L,1,&e);
printf("%d\n",e);
return 0;
}