前言
前面描述了堆棧是先進後入的方式,隊列則是我們傳統的先進先出方式,例如排隊買票,如果先去的人肯定是先買到票,後去的人則是後買到票。我們實現的時候仍然採用數組和鏈表的形式分別實現
數組實現
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
// 定義隊列結構體
typedef struct queue {
int data[MAX];
int front;
int rear;
}Queue;
// 初始化
void init(Queue *p) {
p -> front = p -> rear = 0;
}
// 是否滿
int isFull(Queue *p) {
return p -> rear > MAX - 1;
}
// 入隊列
void enQueue(Queue *p, int data) {
if(isFull(p))
printf("%d不能夠入隊列,隊列已滿\n", data);
else
p -> data[p -> rear++] = data;
}
// 是否爲空
int isEmpty(Queue *p) {
return p -> front == MAX;
}
// 出隊列
int deQueue(Queue *p) {
return p -> data[p -> front++];
}
int main() {
Queue s;
init(&s);
for(int i=0; i<6; i++)
enQueue(&s, i);
while(!isEmpty(&s))
printf("%d ", deQueue(&s));
printf("\n");
return 0;
}
鏈表實現
#include<stdio.h>
#include<stdlib.h>
// 定義每個節點
typedef struct node {
int data;
struct node *next;
} Node;
// 定義隊列節點
typedef struct queue {
Node *front;
Node *rear;
} Queue;
// 初始化
void init(Queue *p) {
p -> front = p -> rear = (Node *) malloc(sizeof(Node));
}
//入隊列
void enQueue(Queue *p, int data) {
Node *newNode;
newNode = (Node *) malloc(sizeof(Node));
newNode -> data = data;
p -> rear -> data = data;
p -> rear -> next = newNode;
p -> rear = newNode;
}
//出隊列
int deQueue(Queue *p) {
Node *r;
int data;
r = p -> front;
data = r -> data;
p -> front = r -> next;
free(r);
return data;
}
// 判斷是否爲空
int isEmpty(Queue *p) {
return p -> front == p -> rear;
}
int main() {
Queue s;
init(&s);
for(int i=0; i<6; i++)
enQueue(&s, i);
while(!isEmpty(&s))
printf("%d ", deQueue(&s));
printf("\n");
return 0;
}