#include<iostream>
using namespace std;
//队列:只允许在一段进行插入,在另一端删除(出队)的线性表 比如打饭时排队
//特点:先进入 先出队 先进先出FIFO(First in First out)
//基本操作:创 销 增 删 查
//用顺序存储的方式实现队列
#define MaxSize 10
typedef struct {
int data[MaxSize];
int front, rear;
} SqQueue;
void InitQueue(SqQueue& Q) //对队列进行初始化
{
Q.rear = Q.front = 0; //队尾和队头都指向0
}
void testQueue() {
SqQueue Q; //声明一个队列(顺序存储)
InitQueue(Q);
}
//入队--首先判断队列有没有存满
bool EnQueue(SqQueue& Q, int x) {
if ((Q.rear + 1) % MaxSize==Q.front)//头尾相接说明队列已满
return false;
Q.data[Q.rear] = x;//将x插入队尾
Q.rear = (Q.rear + 1)%MaxSize; //队尾指针后移 此处进行取余数操作
return true;
}
//出队 (删除一个对头元素,并用x返回)
bool DeQueue(SqQueue& Q, int &x) {
if (Q.front == Q.rear)
return false;//队空则报错
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;//同理
}
//查 获取对头元素的值 //实际上就删除了一行代码
bool FindQueue(SqQueue& Q, int x) {
if (Q.front == Q.rear)
return false;
x = Q.data[Q.front];
return true;
}
//输出
void PrintQueue(const SqQueue& Q) {
int i = Q.front;
while (i != Q.rear) {
cout << Q.data[i] << " ";
i = (i + 1) % MaxSize;
}
cout << endl;
}
//队列元素个数公式 (rear+MaxSize-front)%MaxSize;
int main() {
SqQueue Q;
InitQueue(Q);
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
cout << "删除前";
PrintQueue(Q);
int x ;
if (DeQueue(Q, x)) {
cout << "删除元素" << x << endl;
}
else{
cout << "队列为空" << endl;
}
cout << "删除后";
PrintQueue(Q);
system("pause");
return 0;
}
王道数据结构3.2.1-3.2.2队列的基本操作
最新推荐文章于 2024-08-18 19:23:29 发布