1.队列的简介
队列(Queue),简称队,它也是一种运算受限的特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO)线性表。
对应我们日常生活中的情形,比如,在食堂的单窗口买饭,一个食堂阿姨每次只能给一位同学打饭,那么我们就需要排队买饭,先到的同学排在队伍的前面,后来的同学排在后面。前面的同学先买到饭然后出队离开;后面来的同学原则上只能排到队伍的后面(手动狗头)。这就是先来的先请求得到服务。再比如我们有一台网络共享打印机,网络中的任何一台机器都可以向它发出打印请求。但它每次只能服务一个,该如何处理这些请求呢?这个时候控制打印机的程序就会把请求们加入到一个队列,只要队列中有内容,打印机就会从不断地从队列头部取出请求执行打印。计算机的处理器也是一个共享的资源,很多程序或者说进程需要处理器的时间片来执行,那么这些进程也会被放入一个队列。
对于栈,插入和删除只能从一端进行;对于队列,插入和删除操作必须从不同端进行。接下来我们用两种方式来实现相关操作。
2.队列的简单实现
首先创建一个包含整型元素的数组来存储队列。下面是一种极其简单的实现方式。代码:
#include<stdio.h>
#define MAXSIZE 10
int A[MAXSIZE];//定义一个全局整型数组存放队元素
int front = -1;
int rear = -1; //队空时将索引置为-1;
//入队操作
void Enqueue(int x){
//队满则不支持入队
if(rear ==MAXSIZE-1){
printf("Error:Queue is Full ");
return ;
}
A[++rear] = x;
}
//出队操作
void Dequeue(){
if((rear ==-1)&& front ==-1){
printf("Error:Queue is Empty");<