1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 typedef int Status; //將status狀態設定為int 6 typedef int ElemType;//ElemType狀態設定為int 7 8 #define LIST_INIT_SIZE 100 //線性表存盤空間的初始分配量 9 #define LISTINCREMENT 10 //線性表存盤空間的分配增量 10 11 #define OK 1 12 #define ERROR 0 13 14 /*--------線性表的動態分配順序存盤結構--------*/ 15 typedef struct { 16 ElemType* elem; //存盤空間基址 17 int length; //當前長度 18 int listsize; //當前分配的存盤容量 19 }SqList; 20 21 /*--------初始化--------*/ 22 Status InitList_Sq(SqList& L) { 23 //構造一個空的線性表L 24 L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); 25 if (!L.elem) exit(OVERFLOW); //存盤分配失敗 26 L.length = 0; //空表表長為0 27 L.listsize = LIST_INIT_SIZE; //儲時存盤容量 28 return OK; 29 }//InitList_Sq 30 31 /*---------插入--------*/ 32 Status ListInsert_Sq(SqList& L, int i, ElemType e) { 33 //在順序表L中第i個位置之前插入新的元素e 34 //i的合法值為1 =< i =< ListLength_Sq(L) + 1; 35 if (i < 1 || i > L.length + 1) return ERROR; 36 if (L.length > L.listsize) { //當前存盤空間已滿,增加分配 37 ElemType* newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType*)); 38 if (!newbase) exit(OVERFLOW); //存盤分配失敗 39 L.elem = newbase; //新基址 40 L.listsize += LISTINCREMENT; //增加存盤容量 41 } 42 int q = i - 1; //q為要插入的位置 43 for (int p = L.length - 1; p > q; --p) 44 L.elem[p + 1] = L.elem[p]; //要出入位置后的元素全部進行右移 45 46 L.elem[q] = e; //對要插入的數進行賦值 47 ++L.length; //表長增加 48 return OK; 49 }//ListInsert_Sq 50 51 /*---------洗掉--------*/ 52 Status ListDelete_Sq(SqList& L, int i, ElemType& e) { 53 //在順序表L中洗掉第i個元素,并將其值回傳 54 if (!L.length) exit(OVERFLOW); //空鏈表回傳失敗 55 if (i < 1 || i > L.length) return ERROR; //i的取值不符合 56 int q = i - 1; //要洗掉位置的下標 57 e = L.elem[q]; //取出要洗掉的值 58 for (int p = L.length - 1; q < p; ++q) 59 L.elem[q - 1] = L.elem[q]; 60 --L.length; //順序表長度減一 61 return OK; 62 }//ListDelete_Sq 63 64 65 int main() { 66 67 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456199.html
標籤:其他
