資料結構 佇列

2021-08-08 09:28:35 字數 2273 閱讀 2578

佇列像棧一樣,也是乙個表。使用佇列時,從一端進行插入,從另一端進行刪除。佇列的基本操作是入隊(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...