(一)順序表
(1)順序表的結構體定義
typedef struct { int data[maxSize]; //默認int型,根據題目要求自行改變 int length; } Sqlist
考試常用順序表定義
int A[maxSize]; //定義了一個長度為n,表內元素為整數的順序表 int n;
(2)初始化順序表表,創建一個空的線性表
void initList(Sqlist &L) //表L本身要改變,所以使用引用型 { L.length=0; }
(3)判斷順序表是否為空
int IsEmpty(Sqlist L) { return L.length==0; }
(4)順序表中按元素值查找
在順序表中查找第一個值等於e的元素,並返回其下標
int FindElem(Sqlist L,int e) { int i; for(i=0;i<L.length;++i) if(e==L.data[i]) return i; return 0; //未找到,返回0,作為失敗標記 }
(5)順序表中刪除元素
刪除順序表中下標為p(0<=p<=L.length-1)的元素,成功返回1,否則返回0,並將被刪除的元素賦值給e
int deleteElem(Sqlist &L,int p,int &e) { int i; if(p<0||p>L.length-1) return 0; //越界,刪除失敗,返回-1 e = L.data[p]; for(i=p;i<L.length-1;++i) L.data[i]=L.data[i+1]; //從p位置開始,后面的元素前移 --(L.length); //刪除成功,表長減一 return 0; //刪除成功,返回0 }
(6)順序表中插入元素
在順序表L的第p個位置插入新的元素e,如果p的輸入不正確,返回0,否則返回1
int insertElem(Sqlist &L,int p,int e) { int i; if(p<0||p>L.length||L.length=maxSize) return 0; //插入失敗,返回0 for(i=L.length-1;i>=p;--i) L.data[i+1]=L.data[i]; //元素后移 L.data[p]=x; ++(L.length); //表長加一 return 0; //插入成功,返回0 }
(7)設計一個算法,將順序表中的元素逆置
分析:使用兩個變量i ,j 指示元素表中的第一個和最后一個元素,交換i , j 所指元素,然后 i 向后移,j 向前移,如此循環,指導 i 和 j相遇
void reverse(Sqlist &L) { int i,j; int temp; //輔助變量,用於交換 for(i =0,j=L.length-1;i<j;++i,--j) //i ,j 相遇時,循環結束 { temp = L.data[i]; L.data[i] = L.data[j]; L.data[j] = temp; } }
(8)刪除順序表L中下標 i 到 j 的(包括 i j )的所有元素
void delete(Sqlist &L,int i,int j) { int k,delete; delete = j-i+1; //元素要移動的距離 for(k=j+1;k<L.length;++k) { L.data[k-delete]=L.data[k]; //用第k個元素去覆蓋它前面的第delete個元素 } L.length = delete; }