137 lines
2.8 KiB
C++
137 lines
2.8 KiB
C++
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
#define MAXSIZE 10
|
||
typedef struct Queue
|
||
{
|
||
int *data; //存储空间的基地址
|
||
int front, rear; //头指针、尾指针
|
||
int count; //新增一个 count变量,用于记录队中元素个数
|
||
}Queue;
|
||
|
||
//初始化队列
|
||
void Init(Queue &Q)
|
||
{
|
||
Q.data = new int[MAXSIZE];
|
||
//处理front, rear指针,以及count变量
|
||
Q.front = 0;
|
||
Q.rear = 0;
|
||
Q.count = 0;
|
||
}
|
||
|
||
//入队
|
||
void EnQueue(Queue &Q, int e)
|
||
{
|
||
if (Q.count == MAXSIZE) //利用count判断队是否满
|
||
printf("队满\n");
|
||
else {
|
||
//入队元素,尾指针+1
|
||
Q.data[Q.rear] = e;
|
||
Q.rear = (Q.rear + 1) % MAXSIZE; //循环队列,需要取模
|
||
//更新count值
|
||
Q.count++;
|
||
printf("元素%d入队成功\n", e);
|
||
}
|
||
}
|
||
|
||
//出队
|
||
void DelQueue(Queue &Q, int &e)
|
||
{
|
||
if (Q.count == 0) //利用count判断队是否空
|
||
printf("队空\n");
|
||
else{
|
||
//出队元素,头指针+1
|
||
e = Q.data[Q.front];
|
||
Q.front = (Q.front + 1) % MAXSIZE; //循环队列,需要取模
|
||
//更新count值
|
||
Q.count--;
|
||
printf("出队元素为:%d\n", e);
|
||
}
|
||
}
|
||
|
||
//判断队空
|
||
void IsNull(Queue Q)
|
||
{
|
||
if (Q.count == 0) //利用count判断队是否空
|
||
printf("队空\n");
|
||
else
|
||
printf("队不空\n");
|
||
}
|
||
|
||
//显示整个队列
|
||
void Display(Queue Q)
|
||
{
|
||
if (Q.count == 0) {
|
||
printf("队列为空\n");
|
||
return;
|
||
}
|
||
|
||
int tempFront = Q.front; // 使用临时变量,避免修改原队列
|
||
int tempCount = Q.count; // 使用临时计数
|
||
|
||
while (tempCount > 0)
|
||
{
|
||
printf("%3d,", Q.data[tempFront]);
|
||
tempFront = (tempFront + 1) % MAXSIZE; // 临时指针后移
|
||
tempCount--; // 临时计数减1
|
||
}
|
||
printf("\n");
|
||
}
|
||
|
||
int main()
|
||
{
|
||
Queue Q;
|
||
printf("------------------------------------\n");
|
||
printf("1.初始化队列\n");
|
||
printf("2.判断队列是否为空\n");
|
||
printf("3.入队\n");
|
||
printf("4.出队\n");
|
||
printf("5.显示整个队列\n");
|
||
printf("6.退出\n");
|
||
printf("------------------------------------\n");
|
||
int sel;
|
||
while (1)
|
||
{
|
||
printf("请输入选项:");
|
||
scanf("%d", &sel);
|
||
switch (sel)
|
||
{
|
||
case 1:
|
||
Init(Q);
|
||
printf("队列已经初始化。\n");
|
||
break;
|
||
case 2:
|
||
IsNull(Q);
|
||
break;
|
||
case 3:
|
||
{
|
||
int n, e;
|
||
printf("请输入入队元素个数:");
|
||
scanf("%d", &n);
|
||
printf("请输入需要入队的%d个元素:",n);
|
||
for (int i = 0; i < n; i++)
|
||
{
|
||
scanf("%d", &e);
|
||
EnQueue(Q, e);
|
||
}
|
||
}
|
||
break;
|
||
case 4:
|
||
{
|
||
int e;
|
||
DelQueue(Q, e);
|
||
}
|
||
break;
|
||
case 5:
|
||
printf("队列为:");
|
||
Display(Q);
|
||
break;
|
||
case 6:
|
||
exit(0);
|
||
default:
|
||
printf("无效选项\n");
|
||
}
|
||
}
|
||
return 0;
|
||
}
|