数据结构线性表 - 循环顺序队列练习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