佇列像棧一樣,也是乙個表。使用佇列時,從一端進行插入,從另一端進行刪除。佇列的基本操作是入隊(enquence),它是在表的末端即隊尾(rear)插入乙個元素;還有出隊(dequeue),它是刪除(或返回)在表的開頭即隊頭(front)的元素。佇列同樣也有兩種儲存方法,分別是順序迴圈儲存結構和鏈式儲存結構。
對於每乙個佇列的資料結構,我們保留乙個陣列queue[ ],以及位置front 和 rear ,他們代表佇列的兩端。我們還要記錄實際存在於佇列的元素的個數size。為使乙個元素x入隊,我們讓size 和 rear 增加1,然後置queue[rear] = x。為使乙個元素出隊,我們置返回值為queue[front],size減1,然後使front增1。但是這種實現存在乙個問題,經過多次入隊後,再下一次入隊就會是乙個不存在的位置,然而,佇列中也許只存在幾個元素,因為若干元素可能已經出隊了。簡單的解決方法是:只要front 和 rear 到達陣列的尾端,它就繞回開頭,這種叫做迴圈陣列實現。
void queueinitiate(sequencequeue *q)
int queuenotempty(sequencequeue q)
int enqueue(sequencequeue *q, elementtype x)
else
}
int dequeue(sequencequeue *q, elementtype *x)
else
}
int queueget(sequencequeue *q, elementtype *x)
else
}
typedef struct queuenode
linkqueuenode;
typedef struct
linkqueue;
void queueinitiate(linkqueue *q)
int queuenotempty(linkqueue q)
int enqueue(linkqueue *q, elementtype x)
p->data = x;
p->next = null;
if(q->rear != null)
q->rear->next = p;
q->rear = p;
if(q->front == null)
q->front = p;
return 1;
}
int dequeue(linkqueue *q, elementtype *x)
else
}
int queueget(linkqueue q, elementtype *x)
else
}
void destory(linkqueue q)
}
1.解決具有先進先出排隊特點的問題
2.解決農夫過河問題
乙個農夫帶著乙隻狼,乙隻羊和一棵白菜,欲從河的北岸坐船到南岸去。小船只能容納農夫和一件物品,只有農夫撐船。另外,狼會吃羊,羊會吃白菜,所以農夫不能單獨地留下狼和羊自己離開,或者留下羊和白菜自己離開。
解決:1.將農夫、狼、羊和白菜在河的北岸和南岸的情況,抽象為n種不同狀態組合,而這些狀態之間可以相互轉變,只要找到一組運算可以將初始狀態轉為目標狀態,那麼問題就解決了。
2.使用廣度優先搜尋獲得所有的狀態,顯然可以用佇列的方式實現。
3.使用乙個4位二進位制數從左到右表示農夫、狼、白菜和羊的位置,0表示該角色在南岸,1則表示該角色在北岸。那麼問題轉為從初始狀態0000(全部在南岸)開始,尋找一種安全狀態序列1111(全部在北岸)的過程。
4.用函式location表示這個4位的二進位制,用函式safe判斷安全狀態。
5.利用以整數佇列來實現廣度優先搜尋,記錄已被訪問的各個狀態以及相應的路徑,構造乙個整數順序表route記錄所有的狀態,共16種(0000~1111)。在順序表中每個元素初始值為-1。
3.使用佇列給出提高執行效率的演算法
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...