資料結構基礎 順序表的基本操作

2021-09-12 21:52:21 字數 2790 閱讀 1255

順序表一般可以分為:

1.靜態順序表:使用定常陣列儲存

//靜態順序表,固定大小

//typedef struct seqlistseqlist;

2.動態順序表:使用動態開闢的陣列儲存

//動態順序表(程式執行期間可以控制容量的大小)

typedef int sldatatype  //方便型別修改

typedef struct seqlistseqlist;

順序表的基本操作:

建立、銷毀、插入、刪除、修改、查詢

1.首先是順序表的建立,用malloc 申請動態記憶體空間,要注意的是判斷變數的位址是否為空,為空的話就無法進行操作了

void seqlistinit(seqlist *pseqlist)
2.順序表的銷毀

還是簡單的判空,銷毀的話也不用刪除所有元素,直接將記憶體釋放掉,size,capacity置為0就好。我們要知道的是每塊記憶體都或多或少的儲存著資料,我們寫入時直接可以覆蓋,釋放記憶體時也就不用乙個個刪除了

void seqlistdestory(seqlist *pseqlist)
3.尾插

顧名思義,就是從順序表的末尾進行插入,只要將size加一再插入就好。這裡的時間複雜度為o(1)。

//尾插    複雜度o(1)

void seqlistpushback(seqlist *pseqlist,sldatatype value)

4.頭插

先將資料從後往前全部向後移一位,然後插到第乙個的位置上。由於我們用了乙個迴圈,所以它的複雜度為o(n)。

//頭插      o(n)

void seqlistpushfront(seqlist *qseqlist,sldatatype value)

pseqlist->array[0] = value; //遍歷完之後將值傳給第乙個

pseqlist->size++;

}

5.中間插入

大體是需要將pos後面的元素一次向後移動一位,再插入進來。但迴圈的開始和結束分為兩種,我們在這裡分兩種情況,相當於給和拿。

那麼就要說到兩種位置的概念,一種是當前資料所在的座標,一種是資料將要轉移到的座標

第一種從當前資料的座標開始轉移,我畫了圖應該可以理解,先把最後乙個元素移動到下乙個位置,再依次迴圈,那麼迴圈就是從size-1開始到pos結束

}第二種是把前乙個座標的值替換到當前位置

void seqlistinsert(seqlist *pseqlist,int pos,sldatatype value);

pseqlist->array[pos] = value;

pseqlist->size++;

}

寫的時候可以觀察迴圈的次數和要移動的資料個數是否相同,不相同則錯誤

6.尾刪

//刪除    直接size-1

void seqlistpopback(seqlist *pseqlist)

7.頭刪

//頭刪  o(n)  0 -> size-2或者1 -> size-1

void seqlistheadback(seqlist *pseqlist)

pseqlist->size--;

}

8.根據位置刪除

//根據位置做刪除  o(n)

void seqlisterase(seqlist *pseqlist,int pos)

pseqlist->size--;

}

9.查詢

int seqlistsearch(const seqlist *ps,sldatatype value)

}}

10.修改

void seqlistmodify(seqlist *ps,sldatatype value)

11.擴容

擴容的時候一定是容量已滿的情況,所以我們要有三個步驟:

1)將資料轉移到新申請的記憶體中

2)舊空間釋放

3)容量改變

static void checkcapacity(seqlist *pseqlist)

int newcapacity = pseqlist->capacity * 2;

sldatatype * newarray

= (sldatatype *)malloc(sizeof(sldatatype)* newcapacity);

assert(newarray);

for(int i=0;i < pseqlist->size;i++)

}

資料結構 順序表的基本操作

計算機中線性表的存放結構主要有兩種 順序儲存結構和鏈式儲存結構。採用前者存放方式的線性表是順序表,採用後者的就是我們平時所說的鍊錶 線性鍊錶 這裡先對順序表的一些基本操作進行歸納和總結,鍊錶的將在後面的文章中歸納總結。順序表的表示,一般都是借助一維陣列。c 語言定義其結構如下 const int m...

資料結構 順序表的基本操作

main include include define true 1 define error 0 define ok 1 define false 0 define overflow 2 typedef int status typedef int elemtype define list ini...

資料結構 順序表的基本操作

老規矩先來看一下題目 本題要求實現順序表元素的增 刪 查詢以及順序表輸出共4個基本操作函式。l是乙個順序表,函式status listinsert sq sqlist l,int pos,elemtype e 是在順序表的pos位置插入乙個元素e pos應該從1開始 函式status listdel...