数据结构线性表 - 循环顺序队列练习Demo

数据结构线性表 - 循环顺序队列练习Demo

循环顺序队列是利用了队列的逻辑结构以及顺序表的存储结构实现的,在抽象数据类型定义中,定义了两个int型的变量分别表示队头和队尾,当元素入队时,队尾指针+1,带元素出队时,队头指针+1,然后利用数组循环的方法,实现了循环队列的算法。
直接上代码:

#include<iostream>
using namespace std;
#define MAXSIZE 100

typedef struct{
	char p;
}Elem;

typedef struct SqQueue{
	Elem *elem;
	int front, rear;
}SqQueue;

void InitSqueue(SqQueue &Q)
{
	Q.elem = new Elem[MAXSIZE];
	Q.front = Q.front = 0;
	cout << "顺序队列创建完成!";
}

bool IsEmpty(SqQueue &Q)
{
	if (Q.front = Q.rear)
		return true;
	else
		return false;
}

void EnQueue(SqQueue &Q)
{
	char k;
	if ((Q.rear + 1) % MAXSIZE == Q.front)
	{
		cout << "队列已满无法插入数据!";
		return;
	}
	cout << "请输入入队的元素!";
	cin >> k;
	Q.elem[Q.rear].p = k;
	Q.rear = (Q.rear + 1) % MAXSIZE;
	cout << "元素入队成功!";
}

void DeQueue(SqQueue &Q)
{
	if (IsEmpty(Q))
	{
		cout << "顺序队列为空,无法出队元素!";
		return;
	}
	else
	{
		Q.front = (Q.front + 1) % MAXSIZE;
		cout << "成功出队一个元素的数据!";
	}
}

void PrintQueue(SqQueue &Q)
{
	while (Q.front != Q.rear)
	{
		cout << Q.elem[Q.front].p;
		Q.front = (Q.front + 1) % MAXSIZE;
	}
}

void Contents()  //菜单清单
{
	cout << "*********************************\n";
	cout << "*         顺 序队 列 练 习      *\n";
	cout << "*                               *\n";
	cout << "*        1.初始化顺序队列       *\n";
	cout << "*        2.入队元素(多个)     *\n";
	cout << "*        3.出队元素(一个)     *\n";
	cout << "*        4.查看队列元素         *\n";
	cout << "*        5.退出程序             *\n";
	cout << "*********************************\n";
}

void main()
{
	SqQueue Q;
	int a;
	while (1)
	{
		system("cls");
		Contents();
		cout << "请选择功能:";
		cin >> a;
		switch (a)
		{
		case 1: InitSqueue(Q); system("PAUSE"); break;
		case 2: EnQueue(Q); system("PAUSE"); break;
		case 3: DeQueue(Q); system("PAUSE"); break;
		case 4: PrintQueue(Q); system("PAUSE"); break;
		}
	}
}

顺序循环队列的几个重要的条件:
队空条件:Q.rear == Q.front
队满条件:(Q.rear+1)%MAXSIZE = Q.front

入队指针变化:Q.rear = (Q.rear+1)%MAXSIZE
出队指针变化:Q.front = (Q.front+1)%MAXSIZE

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值