資料結構-佇列-順序表實現-C語言
阿新 • • 發佈:2018-11-27
佇列定義
對於一個存取的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;
}