佇列的簡單理解和基本操作

2021-10-19 05:33:59 字數 2531 閱讀 3219

2. 佇列的順序儲存結構

2.2 迴圈佇列

3. 佇列的鏈式儲存結構

3.4.2 鏈式隊列入隊

3.4.3 鏈式佇列出隊

4. 雙端佇列

4.2 輸出受限的雙端佇列

4.3 輸入受限的雙端佇列

只允許在一端插入,在另一端刪除
分配一塊連續的儲存單元存放佇列的元素
#define maxsize 100   	

//動態陣列的最大容量

將佇列從邏輯上造成乙個環狀,利用取餘實現
出隊、入隊:都按順時針,都是指標加一

隊滿:

方式二:在型別中新增乙個資料成員,用與表示元素個數

方式三:在型別中新增乙個資料成員,用以區分隊空、隊滿

2.2.3.1 迴圈佇列的初始化

實現思路

將隊頭、隊尾都置為0
實現**
//初始化迴圈佇列 

void

initqueue

(sqqueue *q)

2.2.3.2 判斷迴圈佇列是否為空

實現思路

隊頭隊尾指標相等,則隊空
實現**
//判斷迴圈佇列是否為空

intisempty

(sqqueue q)

else

}

2.2.3.3 迴圈隊列入隊

實現思路

1. 先判斷佇列是否隊滿

2. 迴圈在隊尾入隊

實現**
//入隊

intenqueue

(sqqueue *q,

int n)

for(i =

0;i)}

2.2.3.4 迴圈佇列出隊

實現思路

1. 先判斷佇列是否是隊空

2. 迴圈方式進行出隊

實現**
//出隊

intdequeue

(sqqueue *q)

while

(q->rear != q->front)

}

佇列的鏈式表示成為鏈式佇列
//鏈式佇列的結點 

typedef

struct linknodelinknode;

//鏈式佇列

typedef

struct

linkqueue;

實現思路
判斷q.front == q.rear
實現**
//判斷鏈式佇列是否為空 

intisempty

(linkqueue q)

else

}

實現思路
1. 迴圈建立新結點

2. 向新結點的資料域賦值

3. 將其插入到佇列的隊尾

實現**
//入隊

void

enqueue

(linkqueue *head,

int n)

}

實現思路
1. 先判斷是否是空隊

2. 獲取隊首結點的資料

3. 從佇列上摘除該結點

實現**
// 出佇列 

intdelete

(linkqueue *head,

int n)

for(i=

0;i)//釋放結點

free

(temp);}

}

雙端佇列指允許兩端都可以進行入隊、出隊操作的佇列
允許在一端進行插入、刪除,但在另一端只允許插入的雙端佇列

允許在一端進行插入、刪除,但在另一端只允許刪除的雙端佇列

棧和佇列的基本操作

看歐立奇的 程式設計師面試寶典 的棧和佇列的部分,發現了部分問題。其中棧的部分,不能簡單的用malloc函式來初始化stack,應該呼叫create 函式 而且棧的base應該指向棧的最下面的資料的下乙個位址。全部除錯通過 棧的部分通過單鏈表來實現鏈棧的結構 include using namesp...

棧和佇列的基本操作

一種特殊的的線性表,只允許在固定的一端進行插入和刪除操作。棧被稱作是先進後出的線性表。只允許在一端進行插入資料操作,在另一端刪除資料操作的特殊線性表。具有先進先出的特性。迴圈佇列 簡單了解 隊空 rear front 隊滿 rear 1 maxsize front 初始化 銷毀 增 刪 查 type...

棧和佇列的基本操作

資料結構 棧和佇列的基本操作 棧的基本操作 include include define true 1 define false 0 define ok 1 define error 1 define overflow 2 define stack init size 100 define stac...