本文共 2329 字,大约阅读时间需要 7 分钟。
此顺序表是以数组下标为1开始放入元素的。。。
#include#include #include #include #include #include using namespace std;typedef int ElemType;#define LIST_INIT_SIZE 5 //线性表储存空间的初始分配量#define LISTINCREMENT 1 //线性表存储空间的分配增量struct SqList{ ElemType *elem; int length; int listsize;};void init(SqList &L) //初始化{ L.elem=NULL;}bool Is_Exist(SqList &L) //顺序表是否存在{ if(L.elem==NULL) return false; else return true;}bool Create (SqList &L) //创建一个顺序表{ L.elem=(ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE); if(L.elem==NULL) { printf("动态内存分配失败\n"); return false; } L.length=0; L.listsize=LIST_INIT_SIZE; return true;}void ClearList(SqList &L) //清空顺序表{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } L.length=0;}void DestroyList (SqList &L) //销毁顺序表{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } free(L.elem); L.length=0;}bool ListEmpty(SqList &L) //判断顺序表是否为空{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } if(L.length==0) return true; else return false;}int ListLength(SqList &L) //顺序表的长度{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } return L.length;}bool GetElem (SqList &L,int loc,ElemType &e) //顺序表中某个位置元素的值{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } if(L.length <=0) { printf("查找超出顺序表范围\n"); return false; } e=L.elem[loc]; return true;}void ListTraverse (SqList &L) //顺序表遍历{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } for (int i=1;i<=L.length;i++) printf("%d%c",L.elem[i],i==L.length?'\n':' ');}bool ListInsert (SqList &L,int loc,ElemType data) //插入元素{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } if(loc>L.length+1||loc<=0) { printf("插入位置超出顺序表范围\n"); return false; } if(L.length+1>=L.listsize) { ElemType* newbase; newbase=(ElemType*)realloc(L.elem,sizeof(ElemType)*(L.listsize+LISTINCREMENT)); if(newbase==NULL) { printf("追加内存失败\n"); exit(OVERFLOW); } L.elem=newbase; L.listsize+=LISTINCREMENT; } for (int i=L.length+1;i>=loc;i--) L.elem[i]=L.elem[i-1]; L.elem[loc]=data; L.length++; return true;}bool ListDelete(SqList &L,int loc,int &e) //删除指定位置元素{ if(!Is_Exist(L)) { printf("顺序表不存在,程序终止\n"); exit(OVERFLOW); } if(ListEmpty(L)) { printf("顺序表为空,不可删除元素\n"); return false; } if(loc>L.length||loc<=0) { printf("删除位置超出顺序表范围\n"); return false; } e=L.elem[loc]; for (int i=loc;i
转载地址:http://yxaen.baihongyu.com/