算法为循环队列的基本操作函数,为了运行本节所有相关算法,还需要加上相关头文件,并编写菜单函数Menu。编写的参考主函数
时间: 2023-06-02 14:05:14 浏览: 89
我明白了,你需要我回答一个关于算法、头文件和菜单函数的问题,我可以帮你回答。以下是参考代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 //定义循环队列的最大长度
typedef int ElemType; //定义队列元素类型
typedef struct {
ElemType data[MAXSIZE]; //存储队列元素的数组
int front; //队头指针,指向队头元素
int rear; //队尾指针,指向队尾元素的下一个位置
} SqQueue; //循环队列类型定义
//初始化循环队列
void InitQueue(SqQueue *Q)
{
Q->front = Q->rear = 0;
}
//判断循环队列是否为空
int QueueEmpty(SqQueue Q)
{
if(Q.front == Q.rear) //队头指针等于队尾指针时,队列为空
return 1;
return 0;
}
//判断循环队列是否已满
int QueueFull(SqQueue Q)
{
if((Q.rear + 1) % MAXSIZE == Q.front) //队尾指针加1,取模运算后等于队头指针时,队列已满
return 1;
return 0;
}
//获取循环队列的长度
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
//入队操作
int EnQueue(SqQueue *Q, ElemType x)
{
if(QueueFull(*Q)) //队列已满,无法入队
return 0;
Q->data[Q->rear] = x; //队尾指针所指元素赋值为x
Q->rear = (Q->rear + 1) % MAXSIZE; //队尾指针后移一位,如果到达数组末尾,则重新从头开始
return 1;
}
//出队操作
int DeQueue(SqQueue *Q, ElemType *x)
{
if(QueueEmpty(*Q)) //队列为空,无法出队
return 0;
*x = Q->data[Q->front]; //取队头元素的值赋给x
Q->front = (Q->front + 1) % MAXSIZE; //队头指针后移一位,如果到达数组末尾,则重新从头开始
return 1;
}
//菜单函数
void Menu()
{
printf("*********** 循环队列操作 ***************\n");
printf("1. 初始化队列\n");
printf("2. 入队\n");
printf("3. 出队\n");
printf("4. 判断队列是否为空\n");
printf("5. 判断队列是否已满\n");
printf("6. 获取队列长度\n");
printf("7. 退出\n");
printf("***************************************\n");
}
int main()
{
SqQueue Q;
int choice, x;
do {
Menu();
printf("请选择操作:");
scanf("%d", &choice);
switch(choice) {
case 1:
InitQueue(&Q);
printf("队列已初始化!\n");
break;
case 2:
printf("请输入入队元素:");
scanf("%d", &x);
if(EnQueue(&Q, x))
printf("入队成功!\n");
else
printf("入队失败,队列已满!\n");
break;
case 3:
if(DeQueue(&Q, &x))
printf("出队元素为:%d\n", x);
else
printf("出队失败,队列已空!\n");
break;
case 4:
if(QueueEmpty(Q))
printf("队列为空!\n");
else
printf("队列不为空!\n");
break;
case 5:
if(QueueFull(Q))
printf("队列已满!\n");
else
printf("队列未满!\n");
break;
case 6:
printf("队列长度为:%d\n", QueueLength(Q));
break;
case 7:
printf("程序已退出!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
}
} while(choice != 7);
return 0;
}
```
以上是参考程序,可以根据需要做出适当修改。请问还有什么需要我帮助的吗?
阅读全文