線性表分為順序儲存和鏈式儲存:
順序儲存的就是順序表,鏈式儲存分為靜態鍊錶(借助陣列實現),單鏈表,雙鏈表,迴圈多鍊錶(這三個都是通過指標實現)
線性表的基本操作:
initlist(&l):初始化表。構建空的線性表。
length(l):獲取表長,返回線性表l的長度。
locateelem(l,i):按值查詢。
getelem(l,i):按位查詢操作,獲取表中第i位的元素值。
listinsert(&l,i,e):插入,在第i個位置插入元素e.
listdelete(&l,i,&e):刪除操作,刪除第i位的資料並且通過e返回刪除的元素值。
printlist(l):輸出,輸出整個線性表中所有的元素。
empty(l):判斷線性表是否為空,是返回true,不是返回false.
destroylist(&l):銷毀操作,銷毀線性表,釋放線性表l所佔的空間。
順序表基本操作實現:
1.插入操作
bool listinsert(sqlist &l,int i,elementtype e)
if(l.length>=maxsize)
for(int j=l.length;j>=i;j--)
l.data[i-1] = e;//將e放入i位置
l.length++; //表長度加1
return true;
}最好情況的時間複雜度為:o(1)
最差情況的時間複雜度為:o(n)
平均的時間複雜度為:o(n)
2.刪除操作
bool listdelete(sqlist &l,int i,elementtype &e)
e = l.data[i];//刪除的值賦給e
for(int j=i;j3,按值查詢
int locateelem(sqlist l,elemtype e){
int i;
for(i=0;i順序表和煉表的比較:
1.訪問(讀寫)方式
順序表可以順序訪問,也可以隨機訪問,鍊錶只能從表頭開始。
2.邏輯結構和物理結構
順序表儲存時,邏輯上相鄰的資料,物理結構上也相鄰。而鍊錶邏輯上相鄰的資料,物理結構上不一定相鄰。
3.查詢插入和刪除操作
按值查詢當順序表有序時,時間複雜度為o(n),無序時為o(log2n),
按序號查詢時,順序表的時間複雜度為o(1),而鍊錶所有的時間複雜度為o(n).
順序表刪除和插入時平均需要移動半個表的元素,而鍊錶的刪除和插入只需要需改指標域就行。因此,鍊錶的儲存密度不夠大。
4.空間分配
順序表需要預先分配一塊儲存空間,預分配過大將會導致空間浪費,過小就會導致溢位。動態分配雖然可以擴充,但是沒有足夠大的連續儲存空間時會導致分配失敗,鏈式儲存空間是只在需要的時候就會申請,只要有記憶體空間就可以分配,操作靈活,高效。
線性表(順序表 鍊錶)
在程式中,經常需要將一組 通常是同為某個型別的 資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們傳進傳出函式等。一組資料中包含的元素個數可能發生變化。對於這種需求,最簡單的解決方案就是將這樣一組元素看成乙個序列,用元素在序列裡的位置和順序,表示實際應用中的某種有意義的資訊,或者表示資料...
線性表之順序表和煉表
標籤 單鏈表 順序表優缺點 時間複雜度 線性表 2016 03 23 23 43 5200人閱讀收藏 舉報 c c 44 作者同類文章x 這裡比較的是是基於c語言實現的順序表與單鏈表,與其他語言的實現可能會有差異,但我相信語言是相通的,它們的實現機制應該也差不多。1 what 什麼是順序表和單鏈表 ...
線性表和鍊錶
線性表在python中有元組 列表 集合以及字典,非線性表目前介紹鍊錶。名稱 儲存型別 是否可變 是否有序 儲存是否可重複 列表1.使用中括號括起來 如 list 1,2,3,4 2.可以儲存任何型別 3.可以儲存不同型別的資料 不建議 可以增 刪 改 查 是 是 元組1.使用小括號括起來 如 tu...