棧和佇列都是對插入和刪除資料元素有具體要求的線性表我們還是先舉個例子,其實佇列在我們的平時生活中最長見,食堂裡排隊打飯,後來的肯定是站在隊伍最後,然後前面的人打好飯之後再離開;不可能後來的人站在最前面,這樣就沒人願意去排隊了。這其實就類似於佇列的實現方式。
佇列是一種先進先出的線性表。允許插入的一段叫隊尾,允許刪除的一端稱為隊頭。
由於最普通的順序結構佇列幾乎與前面講過的順序結構線性表相同,這裡我們不再贅述,直接介紹效率更高的迴圈佇列和鏈佇列。
如果我們使用的是普通順序結構的佇列,將陣列下標為0的一端設為隊頭,最後乙個陣列元素的下標設為隊尾,那麼乙個資料入隊時,就只需要在隊尾增加陣列元素就可以。但是如果乙個資料要出隊時,在刪去第乙個陣列元素後,後面的資料都要向前移動一位,我們知道這樣的話時間複雜度會為o(n)。所以我們要想出乙個更好的辦法來解決時間效率低的問題。
幾個重要判斷條件:
隊空:front == rear
隊滿:(rear +1)%max = front
佇列長度:(rear - front +max)%max
我們將要用到的是第二種方法。
以下是迴圈佇列的**實現:
#include
#include
#define max 20
typedef
structsqqueue;
sqqueue *initqueue(sqqueue *queue)
void enqueue(sqqueue *queue)
printf("請輸入入隊資料:");
scanf("%d",&queue->date[queue->rear]);
queue->rear = (queue->rear+1) % max;
printf("入隊成功!\n");
}void dequeue(sqqueue *queue)
printf("你要刪除的資料元素為:%d",queue->date[queue->front]);
queue->front = (queue->front+1) % max;
printf("出隊成功!\n");
}void print_queue(sqqueue *queue)
printf("目前佇列中有%d個資料元素\n",(queue->rear-queue->front+max)%max);
if(queue->front < queue->rear)
}else
if(queue->front > queue->rear)
for(i = 0; i < queue->rear; i++)
}}int main()
}return
0;}
佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它稱為鏈佇列。當鍊隊列為空時,front和rear都指向單鏈表的頭節點。當有資料入隊時,在鏈尾插入新節點,rear隨之向後移動,當刪除節點時,刪除頭節點後的第乙個資料節點,注意:當刪除的節點是鍊錶中唯一乙個資料節點時,刪除之後鍊錶中只留下了乙個頭節點,這時要讓rear指向頭節點。
以下是鏈佇列的**實現:
#include
#include
typedef
struct qnodeqnode,*ptr;
typedef
structlinkqueue;
linkqueue *initqueue(linkqueue *queue)
void enqueue(linkqueue *queue)
void dequeue(linkqueue *queue)
ptr temp = queue->front->next;
printf("你要刪除的資料為:%d",temp->date);
queue->front->next = temp->next;
if(queue->rear == temp)
queue->rear = queue->front;
free(temp);
queue->count--;
printf("出隊成功!\n");
}void print_queue(linkqueue *queue)
printf("目前佇列中共有%d個資料\n",queue->count);
int index = 1;
ptr temp = queue->front->next;
while(temp != null)
}int main()
}return
0;}
資料結構 佇列
一 佇列的迴圈陣列實現。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...