循环队列的基本实现
来源:互联网 发布:买卖点炒股软件 编辑:程序博客网 时间:2024/05/22 14:58
#include "stdio.h"
#include "stdlib.h"
#define Queuesize 6//定义分配的内存空间的大小
typedef struct
{
int data[Queuesize];//定义数据域
int front, rear; //因为是用数组来实现,只需要通过下标来定位队列元素即可
int count; //计数器,通过计数器来标志队列里的元素的个数,还可以用来判断队列是空还是满
}Squeue;
void InitQueue(Squeue *s)
{
s->front = 0;
s->rear = 0;//初始化为空,这是为了在C语言中描述方便,约定的,front=rear=0为空队列参考严老师的《数据结构》
s->count = 0;
printf("空队列初始化完成......\n");
}
int IsEmpty(Squeue *s)//判断对列是否为空
{
if (s->count == 0)
{
printf("**队列为空**\n");
}
else
{
printf("**队列非空**\n");
}
return 0;
}
int IsFull(Squeue *s)//判断队列是否满
{
if (s->count ==Queuesize)
{
printf("**队列满**\n");
return 1;
}
else if (s->count >= 0&& s->count < Queuesize)
{
printf("**队列不满,可以操作入队**\n");
}
/*else if ((s->count > 0 && s->count< Queuesize)||(s->count==0))
{
printf("**队列不满,可以操作入队**\n");
}*/
/*else if(s->count==0)
{
printf("**空队列**\n");
}*/
return 0;
}
void PushQueue(Squeue *s)//元素入队
{
int x;
char y = '0';
if (IsFull(s))
{
//printf("对满,不能入队!!\n");
}
else
{
printf("请以空格连续输入入队元素,回车以结束:\n");
while (y != '\n')
{
scanf("%d", &x);
y= getchar();
s->data[s->rear] = x;//把x的值赋给rear的位置,然后rear下移
s->rear = (s->rear + 1) %Queuesize;
s->count++;//表的长度加一
}
}
}
void PopQueue(Squeue *s)//元素出队
{
int x;
printf("出队...\n");
if (IsEmpty(s))
{
printf("队为空,不能出队!!\n");
}
else
{
while (s->count != 0)
{
x= s->data[s->front];//先读取队头元素,出队完成
s->front = (s->front + 1) %Queuesize;//队头往下移动
s->count--;//队的长度减1
printf("%d \n", x);
}
}
printf("出队完成!!\n");
}
void GetTop(Squeue *s)
{
if (s->count == 0)
{
printf("队列为空,无法获取队头元素!!\n");
}
else
{
printf("队头元素为:%d\n",s->data[s->front]);
}
}
void Count(Squeue *s)//统计队中元素,获取队长
{
printf("队列长度为: \n");
printf("%d \n", s->count);
}
void Show(Squeue *s)//观察函数,在把所有的元素都出队后,尝试遍历队中的每一位置,并把其值打印出来,结果读者自己推敲推敲,理解会更深
{
if (s->count != 0)
{
printf("队列中的元素有:\n");
for (int i = 0; i <s->count; i++)
{
printf("%d \n", s->data[i]);
}
}
else
{
printf("队列为空,不能遍历\n");
}
/*int i = 0;
do
{
printf("%d ", s->data[i]);//do-while循环这段代码作用是当元素出队列后,用来验证原来位置上的值是否改变了
printf("**************\n");
i++;
}while (i < 6);*/
}
void GetLast(Squeue *s)
{
if (s->count == 0)
{
printf("队列为空,无法获取队尾元素\n");
}
else
{
printf("队尾元素:%d",s->data[s->rear-1]);
}
}
void Display(Squeue *s)
{
for (int i = 0; i <Queuesize; i++)
{
printf("%d ", s->data[i]);
}
}
void Function()
{
Squeue s;
int flag = NULL;
printf("\t********************\n");
printf("\t循环队列菜单功能实现\n");
printf("\t********************\n\n");
printf("\t1:初始化空队\n");
printf("\t2:判断队列是否为空\n");
printf("\t3:判断队列是否已满\n");
printf("\t4:元素入队\n");
printf("\t5:元素出队\n");
printf("\t6:获取队头元素\n");
printf("\t7:获取队列长度\n");
printf("\t8:遍历队列\n");
printf("\t9:出队后对空队列行遍历,对比效果\n");
printf("\t10:获取队尾元素\n");
printf("\t0:退出\n");
//printf("\t9:元素出队后对队列进行遍历,观察效果\n");
printf("\t********************\n");
printf("请输入相应的序号进行操作:\n");
scanf("%d", &flag);
while (1)
{
switch (flag)
{
case1:InitQueue(&s);
break;
case 2:IsEmpty(&s);
break;
case 3:IsFull(&s);
break;
case4:PushQueue(&s);
break;
case 5:PopQueue(&s);
break;
case 6:GetTop(&s);
break;
case 7:Count(&s);
break;
case 8:Show(&s);
break;
case 9:Display(&s);
break;
case 10:GetLast(&s);
break;
case 0:exit(1);
break;
default:printf("输入有误!!\n");
}
printf("请输入相应的序号进行操作:\n");
scanf("%d", &flag);
}
}
int main()
{
Function();
system("pause");
return 0;
}
- 循环队列的基本实现
- 循环队列的基本实现
- 循环队列基本实现
- 循环队列的基本操作实现
- 实现循环队列的基本操作
- 数据结构-循环队列的基本实现操作
- 实现循环队列基本运算
- python3队列及循环队列基本实现
- 队列----循环队列的实现
- 循环队列的基本操作之代码实现_legend
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 如何开放阿里云服务器8080端口
- Win10搭建wamp环境超详细教程(php7.1.4 + mysql5.7.18 + apache2.4)
- 闲扯工程师的版本管理概念
- pandas的基本用法(四)——处理缺失数据
- ionic2中ts调用js的方法
- 循环队列的基本实现
- hihoCoder 1044 : 状态压缩·一 状压dp
- 使用RecyclerView定制列表项
- 日本著名数学游戏专家中村义作教授提出这样一个问题:将2520个桔子分给六个儿子
- 面试题39_2:平衡二叉树
- 由于该设备有问题,Windows 已将其停止。 (代码 43)
- DTW(Dynamic Time Warping,动态时间归整)
- Node.js使用MongoDB3.4+Access control is not enabled for the database解决方案
- 如何写好C++类