关于队列的基本概念以及基本操作的c++实现
(发表日期:2020/7/7)
队列的定义
队列是一种最基本的数据结构,是一种只能在一端插入,另一端删除的特殊的线性表。
队列的基本理论
- 进行插入操作的一端称为队尾(rear),进行删除操作的端称为队头(front)。
- 队列的插入操作叫做入队,删除操作叫做出队。
- 队列的特点:先进先出,故队列又称为先进先出(FIFO—first in first out)线性表。
举个简单的例子:
中午放学了,同学们都到食堂去排队打饭,他们按照先来后到的顺序排成一列(形成了一个队列),最后来的同学站在队伍的最后端(队尾),最先过来的同学(队头)站在队伍的最前端,这位同学打完饭之后就离开了(出队),轮到他后面的一个同学继续打饭(成为了新的队头),这时,又来了一位同学,但他只能站在队伍的最后端等待(入队,成为新的队尾)前面的同学先打饭。
队列的图解
- 每次出队时,队头元素出队,它的相邻元素成为新的队头元素。
- 每次入队时,目标元素加入到队列尾部并成为新的队尾元素。
当前队列:
入队:
在队列尾部入队,并成为队尾
出队:
队头元素出队,相邻元素称为新的队头
队列的基本操作
- 初始化(queue):设置队列为空
- 判空(isEmpty):判断队列是否为空
- 判满(isFull)<仅对顺序(循环)队列>:判断队列是否已满
- 取队头元素(getFront):取出队头元素
——条件:队列不为空 - 取队尾元素(getBack):取出队尾元素
——条件:队列不为空 - 得到队列长度(getLength):返回队列中元素个数
- 入队(push):将元素入队到队列尾部,称为新的队尾
- 出队(pop):将队头元素出队,队头右移一位
- 队列的析构(~queue)<仅对链式队列>:释放队列中元素的内存空间
队列的三种形式及其c++实现(以整型为例)
-顺序队列
以顺序表(数组)作为队列的存储结构:
c++代码实现:
#include<iostream>
using namespace std;
const int MAXSIZE=1000;
class queue{
public:
queue(){
//初始化
front=0;
back=-1;
count=0;
}
bool isEmpty(){
//判空
if(count==0){
cout<<"queue is empty.\n";
return true;
}
return false;
}
bool isFull(){
//判满
if(count==MAXSIZE||back==MAXSIZE-1){
cout<<"queue is full.\n";
return true;
}
return false;
}
int getFront(){
//取队头
if(isEmpty()){
return -1;
}
return data[front];
}
int getBack(){
//取队尾
if(isEmpty()){
return -1;
}
return data[back];
}
bool push(int num){
//入队
if(isFull()){
return false;
}
back++