#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct SqQueue
{
int data[MAXSIZE];
int front, rear, size;
}SqQueue;
void InsertData(SqQueue *s);
void ViewData(SqQueue *s);
void DeleteData(SqQueue *s);
//顺序队列(不浪费空间,使用size标志顺序队列元素个数)
int main()
{
SqQueue *s = (SqQueue*)malloc(sizeof(SqQueue));
s->front = s->rear = s->size = 0; //初始化队列
InsertData(s);
ViewData(s);
InsertData(s);
DeleteData(s);
ViewData(s);
return 0;
}
//入队操作
void InsertData(SqQueue *s)
{
int data;
while(s->size < 10)
{
printf("当前队列已有%d个数据,请输入数据:", s->size);
scanf("%d", &data);
if(data != 9999) //输入结束标志符
{
s->data[s->rear] = data; //将数据放入队列
s->rear = (s->rear + 1)%MAXSIZE; //rear指针向下移动
s->size ++; //长度+1
printf("添加成功!\n");
}else
{
printf("添加结束!\n");
break;
}
}
}
//出队
void DeleteData(SqQueue *s)
{
if(s->size == 0)
{
printf("队列为空!\n");
}else
{
char a;
while(s->size > 0) //size不为0时队列不为空
{
printf("当前队列共%d个元素,队头元素为%d,是否删除: Y/N\n", s->size, s->data[s->front]);
scanf("%s", &a);
if(a == 'Y')
{
s->front = (s->front + 1)%MAXSIZE; //front向下移动,逻辑上删除数据
s->size--; //队列长度减1
printf("删除成功!\n");
}else
{
printf("删除结束!\n");
break;
}
}
}
}
//遍历队列
void ViewData(SqQueue *s)
{
if(s->size == 0)
printf("队列为空!\n");
else
{
int i, j = s->front;
for(i = 1; i <= s->size; i ++)
{
printf("第%d个数据,值为%d!\n", i, s->data[j]);
j = (j + 1)%MAXSIZE;
}
}
}
【C语言】顺序队列(不浪费空间,使用size标记个数)-基本操作
最新推荐文章于 2022-05-09 22:27:24 发布
本文详细介绍了如何使用C语言实现一个不浪费空间的顺序队列,通过size变量跟踪元素个数,确保高效管理和操作队列元素。内容涵盖了队列的基本操作,如入队、出队、队列满和队列空的判断等。
3601

被折叠的 条评论
为什么被折叠?



