王道数据结构3.2.1-3.2.2队列的基本操作

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值