什麼是佇列?
佇列是一種先進先出的線性表,允許插入的一端稱為隊尾,允許刪除的一方叫做隊頭。
順序儲存的做法
佇列和棧一樣,有自己的規則,使用佇列儲存資料時,只允許從一端進行插入,另一端進行刪除。需要遵循“先進先出”的規則。 按照以往的做法,頭指標都在下標0的位置,那也就意味著,佇列的所有元素都要向前挪動,以保證佇列的隊頭,可是有時想想,為什麼出佇列一定要全部 移動呢?如果不去限制元素必須儲存在陣列的前n個單位這一條件,效能會大大提升,也就是說隊頭不一定要在下標0的位置。當rear==front 的時候 佇列是空的,(rear+1)%max == front 的時候佇列就是滿的。
進佇列
#include <stdio.h>
#include <stdlib.h>
int enQueue(int *a,int front,int rear,int data,int max)//max 佇列的大小
{
if ((rear+1)%max==front) {
printf("空間已滿");
return rear;
}
a[rear%max] = data;//將rear指標向後移動一位
rear++;
return rear;
}
複製程式碼
出佇列
int deQueue(int *a,int front,int rear,int max)
{
if (front == rear) {
printf("佇列已空");
return front;
}
printf("%d", a[front]);
front = (front + 1)% max;//將front指標向後移一位
return front;
}
複製程式碼
應用
int main()
{
int max = 5;
int a[max];
int front,rear;
front = rear = 0;
rear = enQueue(a, front, rear, 1, max);
rear = enQueue(a, front, rear, 2, max);
rear = enQueue(a, front, rear, 3, max);
rear = enQueue(a, front, rear, 4, max);
front = deQueue(a, front, rear, max);
rear = enQueue(a, front, rear, 5, max);
front = deQueue(a, front, rear, max);
rear = enQueue(a, front, rear, 6, max);
front = deQueue(a, front, rear, max);
front = deQueue(a, front, rear, max);
front = deQueue(a, front, rear, max);
front = deQueue(a, front, rear, max);
printf("\n");
return 0;
}
複製程式碼