數據結構線性表的常用操作——順序表

基本概念

線性表是一種基本的存儲結構(數據在計算機中的存儲表示)。

分爲順序表和鏈表,順序表作爲順序存儲結構(俺數組順序依次存放在一組地址連續的存儲單元內),其內部結點a^{i}都有且僅有一個前趨和一個後繼。藉助元素在存儲器中的相對未知來表示數據元素之間的邏輯關係。

在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--;}
    }
}

有問題多謝指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章