0520學習總結(棧,鏈棧,佇列)

2021-08-03 13:01:49 字數 2117 閱讀 5844

棧:

1.概念:這裡說的是指資料結構裡面的棧,和記憶體分配的佔空間是區別開來的

2.模型

後進先出 或 先進後出

3.線性表

4.操作

1.初始化乙個棧

2.判斷棧是否為空

3.判斷棧是否滿

4.入棧(push)

5.出棧(pop)

6.取棧頂

鏈棧:1、什麼是鏈棧:

棧的鏈式儲存!與其說是「棧的鏈式儲存」不如說是「鍊錶的棧式操作」!

2、為什麼引入鏈棧:

陣列:一旦定義了大小就很難改變;

鍊錶:解決陣列上面的缺陷;

棧:在程式設計裡面本質上是對陣列進行操作,也就是用陣列來儲存,只不過操作方式只能夠從陣列最大的下標操作;===》也會有大小的限制!溢位;

鏈棧:為了解決棧空間大小的限制!

3、棧的鏈式儲存的結構模型;

4、鍊錶的棧式操作的具體操作:

1、結點型別:

//每乙個結點的型別;

struct node

;2、指向結點的型別的定義:

struct stack

;具體操作:

1、初始化乙個鍊錶:

其實也就是定義乙個不帶頭結點的鍊錶:也就是指向的是null;

void init_stack(struct stack *s)

2、判斷一下鍊錶是否為空:

int empty_stack(struct stack *s)

return stack_noempty;

}3、判斷是否為滿:不需要判斷!

4、鍊錶增加結點:

偽**:

1、申請乙個結點大小的堆空間;

2、判斷一下申請的堆空間是否成功;

3、給申請的結點賦值;

4、將新申請的結點指向鍊錶原來的第乙個結點;

5、將top指向新申請的結點;

5、鍊錶刪除結點:

偽**:

1、判斷鍊錶是否為空:

2、將s->top指向鍊錶原來第乙個結點的下乙個;

3、將鍊錶原來的第乙個結點刪除;

總結:鍊錶的棧式操作:

1、操作方式是棧式操作:只能夠在一端進行插入或者刪除;

2、和棧的順序儲存方式不同的地方:大小不受限制,可以不限制增加,如果不行的話,計算機記憶體不夠就奔潰;

3、為什麼稱為棧的鏈式儲存?

其實在這裡面每乙個結點就相當於陣列中的乙個元素(a[1] a[3]),因為陣列中的元素分配是挨著的,鍊錶中的結點分配位址不是挨著的,

所以就需要定義乙個結構體型別的指標變數儲存下乙個結點的位址吧!

棧的順序儲存中是用陣列,陣列裡面是乙個乙個緊挨著的元素;

棧的鏈式儲存其實也是陣列,陣列中的元素是乙個乙個的結點,就需要在乙個結點裡面儲存另外乙個結點的位址,這樣就構成了鎖鏈,也就是鍊錶,也就是棧的鏈式儲存!

其實棧的鏈式儲存,或者稱為鍊錶的棧式操作,跟鍊錶的頭插和頭部刪除是一樣的!

佇列:模型和概念跟我們現實生活中的「排隊」是乙個道理!

引入:隊頭指標:front;

隊尾指標:rear;

開闢一段空間用來儲存佇列:用陣列來表示!int queue[10];//表示的是這個佇列只能夠儲存10個元素!

front和rear都表示的是陣列的下標!

1、初始化乙個空佇列:

front = -1;

rear = -1;

2、判斷佇列是否為空:

無論是剛初始化的空佇列還是經過了進隊和出隊的操作導致的空佇列,有乙個特點:front = rear

int empty_queue()

return queue_noempty;

}3、判斷佇列是否滿:

queue[10]:拋開前面位置是否填充資料不看!queue[9]有資料的話==》佇列滿!

4、入佇列:

偽**:

判斷一下佇列是否滿!

比如queue[4]位置有儲存資料,接下來要是再入隊,就要儲存到queue[5]===》

1、rear++;

2、將資料放到queue[rear]裡面!

5、出佇列:

偽**:

1、判斷佇列是否為空;

2、front++;

3、將queue[front]裡面的資料取出來;

順序棧 鏈棧 順序佇列 鏈佇列區別

順序棧的主要特徵是用乙個陣列實現棧的儲存,top指標確定棧頂元素位置 定義形式如下 define max 100 template class seqstack void push t x t gettop t pop bool isempty bool isfull int getsize pri...

棧和佇列6 鏈棧

include using namespace std typedef int qelemtype 資料型別 typedef struct qnode qnode,queueptr 結點型別 typedef struct linkqueue 結點指標型別 1.初始化 bool initqueue l...

棧和佇列 2鏈棧

adrian 鏈棧元素入棧 例如,將元素 1 2 3 4 依次入棧,等價於將各元素採用頭插法依次新增到鍊錶中,每個資料元素的新增過程如圖 2 所示 鏈棧元素出棧 例如,圖 2e 所示的鏈棧中,若要將元素 3 出棧,根據 先進後出 的原則,要先將元素 4 出棧,也就是從鍊錶中摘除,然後元素 3 才能出...