佇列的鏈式儲存結構
佇列的順序儲存結構(參考前面文章:http://blog.itpub.net/29876893/viewspace-1847566/)比鏈式較為複雜些,順序儲存結構要構造迴圈佇列;但是鏈式就不需要,儲存元素的記憶體地址是隨機的,用的時候再向os申請記憶體空間。鏈式儲存結構中需要兩個flag工作指標,過程相對較簡單些。但是其中也有需要注意的細節。下面給出實現程式碼:
執行結果:
該過程用下面圖示簡單的表示一下:
有朋友會問,為什麼最後指向NULL結點,新增這一步似乎對程式的可讀性沒有帶來多少好處,但是這一步關鍵之處,在throughSqueue(queue q, flag fg)中,遍歷整個佇列時,用來判斷遍歷整個佇列時退出的條件,對於該函式作用十分重要,但是如果不實現該函式功能的話,那麼沒有必要再構造出NULL結點。佇列的性質是從front指標處出佇列,從rear指標處入佇列,上面的示意圖很清楚的看出這一性質,front,rear可以看成記憶指標,可以準確的告訴q指標該到什麼位置工作,q指標可以看成是移動的。整個過程,畫出圖會很清晰,相信讀者會有更精彩的功能實現。
點選(此處)摺疊或開啟
-
#include<iostream>
-
using namespace std;
-
typedef struct Queue{ //佇列結點結構
-
char ch;
-
Queue *next;
-
}*queue;
-
typedef struct flaging { //flag指標結構
-
queue front, rear;
-
}*flag;
-
-
void initSqueue(queue);
-
void initflag(flag);
-
void createSqueue(queue, flag);
-
void pushSqueue(queue, flag, char);
-
void popSqueue(queue, flag);
-
void throughSqueue(queue, flag);
-
-
void initSqueue(queue first) {
-
first = new Queue;
-
}
-
void initflag(flag fg) {
-
fg = new flaging;
-
}
-
void createSqueue(queue q,flag fg){
-
cout << "輸入入隊的元素:" << endl;
-
queue p,head;
-
head = q;
-
for (char ch; cin >> ch, ch != '#';) {
-
-
p = new Queue;
-
head->next=p;
-
p->ch = ch;
-
head = p;
-
head->next = NULL;
-
}
-
fg->front=q->next;
-
fg->rear = head;
-
}
-
void pushSqueue(queue q,flag fg,char ch) { //入隊
-
q = fg->rear;
-
q->next = new Queue;
-
q->next->ch = ch;
-
q->next->next = NULL;
-
fg->rear = q->next;
-
}
-
void popSqueue(queue q,flag fg){ //出隊
-
-
q = fg->front;
-
cout << q->ch;
-
fg->front = q->next;
-
delete q;
-
}
-
void throughSqueue(queue q, flag fg) {//遍歷佇列,列印在佇列中的元素
-
q = fg->front;
-
do{
-
cout << q->ch << " ";
-
q = q->next;
-
} while (q != NULL);
-
}
-
-
int main(){
-
Queue q;
-
flaging fg;
-
initSqueue(&q);
-
initflag(&fg);
-
createSqueue(&q, &fg);
-
pushSqueue(&q, &fg, 'F');
-
cout << "出隊的元素是:";
-
popSqueue(&q, &fg);
-
cout << endl;
-
cout << "出隊的元素是:";
-
popSqueue(&q, &fg);
-
cout << endl;
-
cout << "出隊的元素是:";
-
popSqueue(&q, &fg);
-
cout << endl;
-
cout << "在佇列中的元素是:" << endl;
-
throughSqueue(&q, &fg);
-
cout << endl;
- }
該過程用下面圖示簡單的表示一下:
有朋友會問,為什麼最後指向NULL結點,新增這一步似乎對程式的可讀性沒有帶來多少好處,但是這一步關鍵之處,在throughSqueue(queue q, flag fg)中,遍歷整個佇列時,用來判斷遍歷整個佇列時退出的條件,對於該函式作用十分重要,但是如果不實現該函式功能的話,那麼沒有必要再構造出NULL結點。佇列的性質是從front指標處出佇列,從rear指標處入佇列,上面的示意圖很清楚的看出這一性質,front,rear可以看成記憶指標,可以準確的告訴q指標該到什麼位置工作,q指標可以看成是移動的。整個過程,畫出圖會很清晰,相信讀者會有更精彩的功能實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1850594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 佇列的鏈式儲存結構的實現佇列
- 8-佇列的鏈式儲存結構的操作佇列
- 鏈式儲存的佇列佇列
- 佇列-鏈式儲存佇列
- 棧與佇列鏈式儲存結構一貨物上架問題佇列
- 【php實現資料結構】鏈式佇列PHP資料結構佇列
- 線性表之鏈式儲存結構
- 鏈式佇列—用連結串列來實現佇列佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 鏈式佇列佇列
- 佇列的順序儲存--迴圈佇列的建立佇列
- 佇列-順序儲存佇列
- 線性結構(順序儲存和鏈式儲存)和非線性結構的特點及區別
- 利用泛型模擬棧結構實現內部鏈式儲存結構泛型
- C語言資料結構:鏈式佇列的建立及其出入隊操作C語言資料結構佇列
- 【資料結構】二叉樹(順序儲存、鏈式儲存)的JAVA程式碼實現資料結構二叉樹Java
- 資料結構(線性錶鏈式儲存)的幾個基本操作資料結構
- 資料結構線性表的鏈式儲存結構(單連結串列)的表示及其基本操作資料結構
- 單向鏈式佇列佇列
- 佇列(楊輝三角)——鏈式佇列佇列
- 鏈式佇列的實現方式佇列
- 資料結構實驗5、鏈佇列的基本操作資料結構佇列
- 儲存結構
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 連結串列&鏈棧&佇列佇列
- 棧2: 鏈式儲存
- 資料結構-佇列資料結構佇列
- 【資料結構-----佇列】資料結構佇列
- 資料結構 - 佇列資料結構佇列
- 從零開始學資料結構和演算法(二)線性表的鏈式儲存結構資料結構演算法
- RocketMQ(六):nameserver與佇列儲存定位解析MQServer佇列
- JanusGraph -- 儲存結構
- CentOS 儲存結構CentOS
- php圖的儲存結構PHP
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 資料結構之「佇列」資料結構佇列
- 資料結構-佇列-樹資料結構佇列
- 資料結構-佇列、棧資料結構佇列
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql