基本概念
線性表是一種基本的存儲結構(數據在計算機中的存儲表示)。
分爲順序表和鏈表,順序表作爲順序存儲結構(俺數組順序依次存放在一組地址連續的存儲單元內),其內部結點都有且僅有一個前趨和一個後繼。藉助元素在存儲器中的相對未知來表示數據元素之間的邏輯關係。
在C語言的描述中,一組連續的數組空間--->數組
#define MAXSIZE 100 //數組最大下標
typedef struct{
ElemType a[MAXSIZE+1];
int n; //n用來標記元素個數
}sqlist; //sqlist爲線性表類型
常見的操作
1.在I處插入新元素
- 入口判斷:存儲容量夠嗎(n<MAXSIZE)?插入位置正確麼?(i>=1&&i<=n+1)
- i位後面的元素後移
- 在線性表的i處插入新元素
- 表長度加一
if(L.n=MAXSIZE)
error("溢出")
if(i<1||i>n+1)
error("位置錯")
for(j=n;j>=1;j++)
L.a[j+1]=L.a[j];
L.a[i]=x;
n++;
算法分析:元素插入位置和元素移動位置油管,所以無序表最好在表尾插入。
2.有序插入算法
算法要求:在遞增有序的表中將X插入到適當位置。
用循環從後向前比較X和列表元素的大小,比X大的後移。
int j=L.n
while(j>=1&&x<a[j]){
a[j+1]=a[j];
j--;
}
L.a[j+1]=x
3.順序表的刪除
問題:刪除表中第i個元素
方法:元素i+1後的元素前移
void sq-del(sqlist&L.int i,ElemType x){
//刪除線性表的第I個元素
for(int j=i+1;j<=L.n;j++){
a[j-1]=a[j];
L.n--;}}
問題2:刪除第i個元素開始的k個元素
void del(sqlist&L,int i,int k){
if(k>0 && i>0 && (i+k)=L.n){
for(int j=i+k;j<L.n;++j){
L.a[j-k]=L.a[j];
L.n--;}
}
}
有問題多謝指正。