c語言資料結構複習 一

2021-08-04 03:36:23 字數 3624 閱讀 3760

1.線性表

定義n個資料元素的有限序列,記作(

a1, a2,

…, an

)ai

是表中資料元素,

n 是表長度

線性表特點

除第乙個結點(元素)外,其他每乙個結點有乙個且僅有乙個直接前驅結點。

除最後乙個結點(元素)外,其他每乙個結點有乙個且僅有乙個直接後繼結點。

2.順序表定義和特點

將線性表中的元素相繼存放在乙個連續的儲存空間中。

可利用一維陣列描述儲存結構

特點線性表的順序儲存方式 遍歷

順序訪問, 可以隨機訪問

4.鍊錶

鍊錶分為單鏈表、靜態鍊錶、迴圈鍊錶、雙向鍊錶

每個元素(表項

)由結點

(node)

構成。

線性結構

結點可以連續,可以不連續儲存

結點的邏輯順序與物理順序可以不一致

錶可擴充

5單鏈表定義

typedef char listdata;

typedef struct node listnode;

typedef listnode * linklist;   

linklist first;                           //煉表頭指標

單鏈表插入

5.1頭插

newnode->link = first ;    

first = newnode;

5.2 中間插

newnode->link = p->link;   

p->link = newnode;

6.帶表頭結點的單鏈表

表頭結點位於表的最前端,本身不帶資料,僅標誌表頭。

設定表頭結點的目的是

統一空表與非空表的操作

簡化鍊錶操作的實現。

7.頭插法建立單鏈表

從乙個空表開始,重複讀入資料:

生成新結點

將讀入資料存放到新結點的資料域中

將該新結點插入到鍊錶的前端

直到讀入結束符為止。

8.尾插法建立單鏈表

每次將新結點加在鍊錶的表尾;

設定乙個尾指標 r,總是指向表中最後乙個結點,新結點插在它的後面;

尾指標 r 初始時置為指向表頭結點位址

9.迴圈鍊錶

迴圈鍊錶是單鏈表的變形。

迴圈鍊錶最後乙個結點的 link 指標不 為

null

,而是指向了表的前端。

為簡化操作,在迴圈鍊錶中往往加入表頭結點。

10.雙向鍊錶

雙向鍊錶是指在前驅和後繼方向都能遊歷(遍歷

)的線性鍊錶。

雙向鍊錶通常採用帶表頭結點的迴圈鍊錶形式。

11.順序表與鍊錶的比較

基於空間的比較

儲存分配的方式

順序表的儲存空間是靜態分配的

鍊錶的儲存空間是動態分配的

儲存密度 = 結點資料本身所佔的儲存量

/結點結構所佔的儲存總量

順序表的儲存密度 = 1

鍊錶的儲存密度

< 1

基於時間的比較

訪問方式

順序表可以隨機訪問,也可以順序訪問

鍊錶是順序訪問的

插入/刪除時移動元素個數

順序表平均需要移動近一半元素

鍊錶不需要移動元素,只需要修改指標

若插入/刪除僅發生在表的兩端,宜採用帶尾指標的迴圈鍊錶

12.棧

定義●只允許在一端插入和刪除的線性表;

●允許插入和刪除的一端稱為棧頂(top)

,另一端稱為棧底

(bottom)

特點:後進先出 (lifo)

13.棧的主要操作

adt stack seqstack;

int stackempty (seqstack *s) {

//判斷棧是否空?空則返回

1,否則返回0

return s->top == -1;

int stackfull (seqstack *s) {

//判斷棧是否滿?滿則返回

1,否則返回0

return s->top == stacksize-1;

void initstack ( seqstack *s) {   //置空棧

s->top = -1;

int push (seqstack *s, stackdata x) {

//若棧滿返回

0, 否則新元素

x 進棧並返回1

if ( stackfull (s) ) return 0;

s->data[++s->top] = x;        //加入新元素

return 1;

int gettop (seqstack *s, stackdata &x) {

//若棧空返回

0, 否則棧頂元素讀到

x並返回1

if ( stackempty(s) ) return 0;

x = s->data[s->top];

return 1;

int pop (seqstack *s, stackdata &x) {

//若棧空返回

0, 否則棧頂元素退出到

x並返回1

if ( stackempty(s) ) return 0;

x = s->data[s->top--];

return 1;

15.鏈式棧

鏈式棧無棧滿問題,空間可擴充

插入與刪除僅在棧頂處執行

鏈式棧的棧頂在鏈頭

適合於多棧操作

16.佇列

定義佇列是只允許在一端刪除,在另一端插入的線性表

允許刪除的一端叫做隊頭(front),允許插入的一端叫做隊尾

(rear)。

特性先進先出(fifo, first in first out)

17佇列進隊和出隊原則

進隊時隊尾指標先進一  rear = rear + 1,再將新元素按

rear

指示位置加入。

出隊時隊頭指標先進一 front = front + 1,再將下標為

front

的元素取出。

隊滿時再進隊將溢位出錯;

隊空時再出隊將隊空處理。

解決辦法之一:將佇列元素存放陣列首尾相接,形成迴圈(環形

)佇列。

18.迴圈佇列

佇列存放陣列被當作首尾相接的表處理。

隊頭、隊尾指標加1時從

queuesize -1

直接進到

0,可用語言的取模(餘數

)運算實現。

隊頭指標進1:  front = (front+1) % queuesize;

隊尾指標進1:  rear = (rear+1) % queuesize;

佇列初始化:front = rear = 0;

隊空條件:front == rear;

隊滿條件:(rear+1) % queuesize == front

19.佇列的鏈結表示 — 鏈式佇列

隊頭在鏈頭,隊尾在鏈尾。

鏈式佇列在進隊時無隊滿問題,但有隊空問題。

隊空條件為 front == null

資料結構複習一

一 名詞術語 資料 描述客觀事物的數字,字元以及一切能夠輸入到計算機中,並且能夠被電腦程式處理的符號的集合。資料元素 資料這個集合中的乙個個的元素,乙個資料元素可以包含乙個或若干個資料項。資料物件 具有相同特性的資料元素的集合。結構 資料元素之間具有的關係。資料結構 就是具有結構的資料元素的集合。二...

資料結構複習(一)

資料結構的物理結構主要分為兩種 1 順序儲存結構 2 鏈式儲存結構 1 順序儲存結構 順序儲存結構 是把資料元素存放在位址連續的儲存單元中,其資料的邏輯關係和物理關係一致,即邏輯上的前驅後繼關係對應儲存結構也是前驅後繼關係 我們在之前的c語言課程中,陣列就是順序儲存結構。2 鏈式儲存結構 指標 鏈式...

資料結構複習(一)

一 單項選擇題 1.資料的四種基本邏輯結構是指。a.鍊錶 陣列 串 圖狀結構 b.線性表 鍊錶 棧佇列 陣列 c.線性結構 鍊錶 樹形結構 圖形結構 d.集合 線性結構 樹形結構 圖狀結構 2 評價演算法的時間複雜性,比較 對數階量級 與 線性階量級 則有。a 對數階量級複雜性大於線性階量級 b 對...