資料結構 順序表 操作集
阿新 • • 發佈:2018-12-24
此順序表是以陣列下標為1開始放入元素的。。。
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <math.h> #include <stdlib.h> 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<loc||loc<=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<L.length;i++) L.elem[i]=L.elem[i+1]; L.length--; return true; } int main() { SqList L; init(L); Create(L); return 0; }