1. 程式人生 > >資料結構-佇列-順序表實現-C語言

資料結構-佇列-順序表實現-C語言

佇列定義

對於一個存取的n個內容,最先進入的最先出去(First In,First Out:FIFO),即稱為佇列.
比如,食堂排隊,最先去的,最先得到飯菜;
這裡寫圖片描述

關鍵步驟:入隊出隊

這裡寫圖片描述

程式碼實現



//迴圈佇列 順序表實現

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//定義佇列結構
typedef struct _Queue Queue;
struct _Queue{
    int *arr;
    int Front,Rear;
    int
MaxSize; }; //建立佇列 Queue * creatQueue(int MaxSize){ Queue * queue=(Queue *)malloc(sizeof(Queue)); queue->arr=(int *)malloc(MaxSize* sizeof(int)); queue->Front=queue->Rear=-1; queue->MaxSize=MaxSize; return queue; } //若隊尾指標自增取模為隊首指標,則佇列已滿 bool isFull(Queue * queue){ return
((queue->Rear+1)%queue->MaxSize==queue->Front); } //若隊首指標等於隊尾指標,則佇列為空 bool isEmpty(Queue * queue){ return (queue->Front==queue->Rear); } //入隊:若佇列未滿,進行插入操作 bool addQueue(Queue * queue,int num){ if(isFull(queue)){ return false; } else{ queue->arr[(++queue
->Rear)%queue->MaxSize]=num; //queue->Rear=(queue->Rear+1)%queue->MaxSize; //queue->arr[queue->Rear]=num; return true; } } //出隊:若佇列不為空,進行出隊操作 int DeleteQ(Queue * queue){ if(isEmpty(queue)){ return NULL; } else{ return queue->arr[(++queue->Front)%queue->MaxSize]; //queue->Front=(queue->Front+1)%queue->MaxSize; //return queue->arr[queue->Front]; } } int main() { Queue * queue=creatQueue(10); for(int i=0;i<10;i++){ addQueue(queue,i); } for(int i=0;i<10;i++){ printf("%d\t",DeleteQ(queue)); } return 0; }