#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OVERFLOW -2 //在这里申明的时候不用加上;号
#define OK 1
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define LIST_INIT_SIZE 100 //线性表的存储空间的初始分配量
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
//初始化一个线性表
Status InitSqList(SqList &L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));//分配空间大小
if(!L.elem) //如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL)
return ERROR;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//对该线性表插入元素
Status AddElem(SqList &L,ElemType e){
//首先判断这个线性表的空间是否足够,如果不足的话则进行扩展空间
if(L.length>=L.listsize){
L.elem=(ElemType*)realloc(L.elem,(L.listsize+LIST_INIT_SIZE)*sizeof(ElemType));
L.listsize+=LIST_INIT_SIZE;
if(!L.elem){
return ERROR;
}
}
L.elem[L.length++]=e;
return OK;
}
//对该线性表删除元素
Status DelElem(SqList &L,int i){
if(i<1 || i>L.length)
return OVERFLOW;
bool flag=false;
for(int j=0;j<L.length;j++){
if(j+1==i){
flag=true;
}
if(flag){
if(j==L.length-1)
L.elem[j]=NULL;
else
L.elem[j]=L.elem[j+1];
}
}
L.length--;
return OK;
}
//销毁线性表
Status DestroyList(SqList &L){
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return OK;
}
//打印出该线性表的信息
Status PrintSqList(SqList &L){
if(!L.elem){
printf("----此线性表不存在,可能已被销毁\n");
return ERROR;
}
printf("长度:%d\n",L.length);
printf("元素列表:");
for(int i=0;i<L.length;i++){
printf("%d,",L.elem[i]);
}
printf("\n");
}
//将线性表重置为空表
Status ClearList(SqList &L){
if(!L.elem){
printf("----此线性表不存在,可能已被销毁\n");
return ERROR;
}
for(int i=0;i<L.length;i++){
L.elem[i]=NULL;
}
L.length=0;
L.listsize=0;
return OK;
}
bool ListEmpty(SqList &L){
if(!L.elem){
printf("----此线性表不存在,可能已被销毁\n");
return ERROR;
}
if(L.length==0)
return true;
else
return false;
}
int main(){
SqList L;
InitSqList(L);
PrintSqList(L);
AddElem(L,2);
AddElem(L,4);
AddElem(L,6);
PrintSqList(L);
DelElem(L,2);
PrintSqList(L);
DestroyList(L);
PrintSqList(L);
AddElem(L,6);
PrintSqList(L);
ClearList(L);
PrintSqList(L);
ListEmpty(L);
PrintSqList(L);
return 0;
}
顺序表的练习
最新推荐文章于 2024-01-09 21:25:11 发布