資料結構 佇列

2021-08-19 21:07:30 字數 2445 閱讀 1357

棧和佇列都是對插入和刪除資料元素有具體要求的線性表

我們還是先舉個例子,其實佇列在我們的平時生活中最長見,食堂裡排隊打飯,後來的肯定是站在隊伍最後,然後前面的人打好飯之後再離開;不可能後來的人站在最前面,這樣就沒人願意去排隊了。這其實就類似於佇列的實現方式。

佇列是一種先進先出的線性表。允許插入的一段叫隊尾,允許刪除的一端稱為隊頭。

由於最普通的順序結構佇列幾乎與前面講過的順序結構線性表相同,這裡我們不再贅述,直接介紹效率更高的迴圈佇列和鏈佇列。

如果我們使用的是普通順序結構的佇列,將陣列下標為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...