顺序表的练习

来源:互联网 发布:c语言算法教程 编辑:程序博客网 时间:2024/04/30 11:21
#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;elseL.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;} 


原创粉丝点击