数组模拟循环队列
题目2:顺序循环队列的基本操作
设队列的元素类型为char,实现顺序循环队列的各种基本操作的程序:
① 初始化队列Q;
② 判断队列Q是否为空;
③ 入队操作。循环调用入队操作,将若干元素(不少于10个)入队;
④ 出队操作,出队一个元素,并输出该元素;
⑤ 输出队列元素个数;
⑥ 调用入队操作,依次入队4个元素;
⑦ 输出队列序列;
⑧ 主函数通过函数调用实现以上各项操作。
#include<stdio.h>
#include<malloc.h>
/*
* Author : YJDDB
*/
typedef struct List
{
int start;
int end;
int maxsize;
char string[100];
}list;
/*
* 实现循环队列初始化功能
*/
list init()
{
list queue;
printf("请输入循环队列最大长度\n");
scanf("%d",&queue.maxsize);
queue.start = 0;
queue.end = 0;
queue.maxsize++;
return queue;
}
/*
* 实现查询循环队列是否为空功能
*/
int empty(list queue)
{
if(queue.end==queue.start)return 1;
else return 0;
}
/*
* 实现查询循环队列是否为满功能
*/
int full(list queue)
{
if(queue.start==(queue.end+1)%(queue.maxsize))return 1;
else return 0;
}
/*
* 实现循环队列添加元素功能
*/
void push(list *queue)
{
char c;
while(scanf("%c",&c)&&c=='\n');
if(full(*queue))
{
printf("该循环队列满了!,%c 添加失败\n",c);
return ;
}
//printf("请输入您要添加的字符\n");
queue->string[queue->end] = c;
printf("%c 添加成功!\n",c);
queue->end = (queue->end+1)%queue->maxsize;
}
/*
* 实现循环队列弹出元素功能
*/
char pop(list *queue)
{
int tem = queue->start;
if(empty(*queue))
{
printf("该循环队列为空!\n");
return ' ';
}
queue->start= (queue->start+1)%(queue->maxsize);
printf("%c 弹出成功!\n",queue->string[tem]);
return queue->string[tem];
}
/*
* 实现查询循环队列长度功能
*/
void printsize(list queue)
{
printf("该数组的长度为%d\n",(queue.end+queue.maxsize-queue.start)%queue.maxsize);
}
/*
* 实现打印循环队列元素功能
*/
void printlist(list queue)
{
int tem = queue.start;
printf("该数组的元素依次为: \n");
while(tem!=queue.end)
{
printf("%c->",queue.string[tem]);
tem = (tem+1)%queue.maxsize;
}
printf("\n");
}
int main()
{
list queue = init();
printf("接下来请依次输入13个字符\n");
for(int i = 0 ; i< 13;i++)
{
push(&queue);
}
char tem = ' ';
printlist(queue);
tem = pop(&queue);
printlist(queue);
tem = pop(&queue);
printlist(queue);
tem = pop(&queue);
printlist(queue);
tem = pop(&queue);
printsize(queue);
printlist(queue);
return 0;
system("pause");
}