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...