順序表一般可以分為:
1.靜態順序表:使用定常陣列儲存
//靜態順序表,固定大小2.動態順序表:使用動態開闢的陣列儲存//typedef struct seqlistseqlist;
//動態順序表(程式執行期間可以控制容量的大小)順序表的基本操作: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...