佇列-順序儲存

小天秤發表於2018-09-23

什麼是佇列?

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

順序儲存的做法

佇列和棧一樣,有自己的規則,使用佇列儲存資料時,只允許從一端進行插入,另一端進行刪除。需要遵循“先進先出”的規則。 按照以往的做法,頭指標都在下標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;
}


複製程式碼
執行結果

佇列-順序儲存

相關文章