線性表:零個或者多個數據元素的有限序列。
線性表元素的個數n(n≥0)定義爲線性表的長度,當n=0時,稱爲空表。
對於一個非空的線性表或者線性結構,具備如下特色:算法
線性表的順序存儲結構是指用一段地址連續的存儲單元依次存儲線性表的數據元素。
線性表順序存儲結構代碼以下:數組
#define MAXSIZE 100 #define OK 1~~~~ #define ERROR 0 #define TRUE 1 #define FALSE 0 /* ElemType類型根據實際狀況而定,這裏假設爲int */ typedef int ElemType; /* Status是函數的類型,其值是函數結果狀態代碼,如OK等 */ typedef int Status; /*線性結構使用順序表的方式存儲*/ //順序表結構設計 typedef struct { ElemType *data; // 數組存儲數據元素,最大值爲MAXSIZE。 int length; // 線性表當前長度 }Sqlist;
//1.1 順序表初始化 Status InitList(Sqlist *L){ //爲順序表分配一個大小爲MAXSIZE 的數組空間 L->data = malloc(sizeof(ElemType) * MAXSIZE); //存儲分配失敗退出 if(!L->data) exit(ERROR); //空表長度爲0 L->length = 0; return OK; }
插入算法實現思路:函數
代碼實現以下:spa
/* 初始條件:順序線性表L已存在,1≤i≤ListLength(L); 操做結果:在L中第i個位置以前插入新的數據元素e,L的長度加1 */ Status ListInsert(Sqlist *L,int i,ElemType e){ //i值不合法判斷 if((i<1) || (i>L->length+1)) return ERROR; //存儲空間已滿 if(L->length == MAXSIZE) return ERROR; //插入數據不在表尾,則先移動出空餘位置 if(i <= L->length){ for(int j = L->length-1; j>=i-1;j--){ //插入位置以及以後的位置後移動1位 L->data[j+1] = L->data[j]; } } //將新元素e 放入第i個位置上 L->data[i-1] = e; //長度+1; L->length++; return OK; }
刪除算法實現思路:設計
代碼實現以下:code
/* 初始條件:順序線性表L已存在,1≤i≤ListLength(L) 操做結果: 刪除L的第i個數據元素,L的長度減1。 */ Status ListDelete(Sqlist *L,int i){ //線性表爲空 if(L->length == 0) return ERROR; //i值不合法判斷 if((i<1) || (i>L->length)) return ERROR; for(int j = i; j < L->length; j++){ //被刪除元素以後的元素向前移動 L->data[j-1] = L->data[j]; } //表長度-1; L->length--; return OK; }
1. 獲取指定位置的元素blog
//獲取指定位置的元素 Status GetElem(Sqlist L,int i, ElemType *e){ //判斷i值是否合理, 若不合理,返回ERROR if(i<1 || i > L.length) return ERROR; //data[i-1]單元存儲第i個數據元素. *e = L.data[i-1]; return OK; }
2. 清空順序表it
// 初始條件:順序線性表L已存在。操做結果:將L重置爲空表 Status ClearList(Sqlist *L) { L->length=0; return OK; }
3. 判斷順序表是否爲空表class
/* 初始條件:順序線性表L已存在。操做結果:若L爲空表,則返回TRUE,不然返回FALSE */ Status ListEmpty(Sqlist L) { if(L.length==0) return TRUE; else return FALSE; }
4. 獲取順序表長度List
//獲取順序表長度即元素個數 */ int ListLength(Sqlist L) { return L.length; }
5. 順序輸出順序表
//順序輸出List /* 初始條件:順序線性表L已存在 */ /* 操做結果:依次對L的每一個數據元素輸出 */ Status TraverseList(Sqlist L) { int i; for(i=0;i<L.length;i++) printf("%d\n",L.data[i]); printf("\n"); return OK; }
優勢:
缺點: