什么是队列?
队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一方叫做队头。
顺序储存的做法
队列和栈一样,有自己的规则,使用队列存储数据时,只允许从一端进行插入,另一端进行删除。需要遵循“先进先出”的规则。 按照以往的做法,头指针都在下标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;
}
复制代码