顺序队列
—— 头文件
#include <stdio.h>
构造入队列的函数
int enQueue(int *queue, int rear, int data){
queue[rear] = data;
return ++rear;
}
构造展示队列元素的函数
void show(int *queue, int length){
for(int i = 0; i < length; i++){
printf("%d ", queue[i]);
}
printf("\n");
}
构造出队列的函数
int deQueue(int *queue, int front, int rear){
while(front != rear){
printf("出队元素:%d\n",queue[front]);
front++;
}
return front;
}
—— 主函数
int main(void){
int queue[100];
int rear, front;
rear = front = 0;
printf("进行入队列及出队列之前:front=%d,rear=%d\n", front, rear);
rear = enQueue(queue, rear, 1);
rear = enQueue(queue, rear, 2);
rear = enQueue(queue, rear, 3);
rear = enQueue(queue, rear, 4);
show(queue, rear-front);
front = deQueue(queue, front, rear);
printf("进行入队列及出队列之后:front=%d,rear=%d\n", front, rear);
return 0;
}
对顺序队列的优化 —— 环状队列
—— 头文件
#include <stdio.h>
#define max 5
构造初始化队列的函数
void init(int *queue){
for(int i = 0; i < max-1; i++){
queue[i] = 0;
}
}
构造入队列的函数
int enQueue(int *queue, int front, int rear, int data){
if((rear+1)%max==front){
printf("空间已满");
return rear;
}
queue[rear%max] = data;
return ++rear;
}
构造展示队列元素的函数
void show(int *queue, int front, int rear){
for(int i = front; i < rear; i++){
printf("%d ", queue[i]);
}
printf("\n");
}
构造出队列的函数
int deQueue(int *queue, int front, int rear){
if(rear%max == front){
printf("队列为空");
return front;
}
printf("出列元素:%d\n",queue[front]);
front = (front + 1) % max;
return front;
}
—— 主函数
int main(void){
int queue[max];
init(queue);
int front, rear;
front = rear = 0;
rear = enQueue(queue, front, rear, 1);
rear = enQueue(queue, front, rear, 2);
rear = enQueue(queue, front, rear, 3);
rear = enQueue(queue, front, rear, 4);
show(queue, front, rear);
front = deQueue(queue, front, rear);
front = deQueue(queue, front, rear);
front = deQueue(queue, front, rear);
front = deQueue(queue, front, rear);
show(queue, front, rear);
return 0;
}
链队列
—— 头文件
#include <stdio.h>
#include <stdlib.h>
结构体声明队列节点
typedef struct myQNode{
int data;
struct myQNode *next;
} QNode;
构造创建链式队列的函数
QNode *initQueue(){
QNode *queue = (QNode*)malloc(sizeof(QNode));
queue->next = NULL;
return queue;
}
构造尾插法插入链队列元素的函数
QNode *enQueue(QNode *rear, int data){
QNode *enElem = (QNode*)malloc(sizeof(QNode));
enElem->data = data;
enElem->next = NULL;
rear->next = enElem;
rear = enElem;
return rear;
}
构造出列函数
QNode *DeQueue(QNode *top, QNode *rear){
if (top->next == NULL) {
printf("\n队列为空");
return rear;
}
QNode *p = top->next;
printf("%d ", p->data);
top->next = p->next;
if (rear == p) {
rear = top;
}
free(p);
return rear;
}
—— 主函数
int main(void){
QNode *top, *rear;
top = rear = initQueue();
rear = enQueue(rear, 1);
rear = enQueue(rear, 2);
rear = enQueue(rear, 3);
rear = enQueue(rear, 4);
rear = DeQueue(top, rear);
rear = DeQueue(top, rear);
rear = DeQueue(top, rear);
rear = DeQueue(top, rear);
rear = DeQueue(top, rear);
return 0;
}