資料結構 線性表知識要點複習

2021-10-17 12:06:07 字數 3006 閱讀 2879

雙向鍊錶

迴圈鍊錶

線性表常見題型

最後的碎碎念

線性表是n個資料元素的有限序列,是最簡單的資料結構,有以下幾個特點。

同一線性表中元素必須屬於同一資料物件

相鄰元素之間有序偶關係;

線性表的抽象資料型別如下1

順序表示是用一組位址連續的儲存單元依次儲存線性表的資料元素,有點類似於陣列。(因為可以直接用陣列替換所以不再細講)

重點!

重點!

重點!

鏈式表示【或者直接稱為鍊錶】不要求儲存的資料邏輯上相鄰的物理位置也相鄰【這句話有點拗口 ,其實就是在鍊錶中前乙個資料的位置不一定和下乙個資料的儲存位置相鄰】

從大一c語言開始到現在寫起來還感覺有點麻煩的東西(**弱雞實力無疑)。鍊錶一共有三種表現形式:線性鍊錶、雙向鍊錶和迴圈鍊錶。雖然在c++中感覺可以有很多東西代替鍊錶的實現,但是在作業系統實驗裡面用到鍊錶的東西還是挺多的,所以在這裡要重新實現一次。

//節點

class

listnode

int val;

listnode* next;};

//鍊錶類

class

list

;

//建立鍊錶

list::

list()

void list::

insertlist

(int newvalue)

bool list::

deletelist

(int data)

else}if

(l1 ==

null

)return

false

;else

if(l1 == head)

else

return

true

;}

void list::

printlist()

cout << endl << endl;

}

雙向鍊錶的實現和線性鍊錶差不多,只需要在每個結點增加乙個前繼指標即可。

修改後的結點類定義如下

class

listnode

int val;

listnode* next;

listnode* prev;

};

list::

list()

void list::

insertlist

(int newvalue)

bool list::

deletelist

(int data)

else}if

(l1 ==

null

)return

false

;else

l1->next =

null

; l1-

>prev =

null

;free

(l1);}

return

true

;}

void list::

printlist()

cout << endl << endl;

l1 = tail;

while

(l1!=head)

cout << endl << endl;

}

迴圈鍊錶相當於乙個環(?)平時刷題感覺不經常遇到,但在作業系統互斥中消費者和生產者需要用到。迴圈鍊錶和線性鍊錶不同之處就在於尾指標始中指向頭結點。

迴圈鍊錶的結點和鍊錶的類定義與線性鍊錶一樣,這裡不再贅述。

list::

list()

void list::

insertlist

(int newvalue)

bool list::

deletelist

(int data)

else}if

(l1 == head)

return

false

;else

l1->next =

null

;free

(l1);}

return

true

;}

void list::

printlist()

cout << endl << endl;

}

線性表常見的提醒包括了合併鍊錶、鍊錶排序等等。這些題目會在接下來的力扣刷題中逐一進行求解。

大一學c語言感覺最難的一章就是指標和檔案,然而沒想到到了大二資料結構中最簡單的一種就是鍊錶【然後我也沒想到資料結構裡感覺最難的排序和查詢居然是大三演算法中最簡單的遞迴分治】。總體來說線性表的實現難點在於指標的正確應用,包括刪除時如何確保不會有野指標的產生等等。雖然在一些情況下野指標不會產生問題,但是在某些特殊環境下野指標會造成錯誤【比如作業系統實驗中奇奇怪怪的bad alloc錯誤】.

[圖源自旭玲姐姐的ppt] ↩︎

複習資料結構 線性表

線性表實現 陣列方式 隨機訪問很快,常數級別。但是增刪慢了,n級別。預先要知道線性表的大小 鍊錶方式 隨機訪問不急,n級別。但是增刪快,常數級別。就是c 的new delete操作效能不怎樣,可以用free list來維護增刪的節點。對於new delete操作有5倍左右提公升吧。基於陣列 指標構造...

資料結構複習之 線性表

線性表簡單地說就是資料元素的序列,即一對一關係 讀取 o 1 插入 刪除 o n 實現 package org.xiazdong.list public class myarraylist public myarraylist int length public myarraylist tarr e...

資料結構複習之線性表

基本概念 從邏輯上可以把資料結構分為線性結構和非線性結構兩大類。對於給定的n個元素,可以構造出的邏輯結構有 集合,線性結構,樹形結構,圖狀結構或網狀結構。乙個資料元素可以由若干個資料項組成。資料項是最小單位。線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。構建乙個空的線性表 ...