循环队列,出队,入队
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构循环队列的顺序结构实现以及队列的初始化、入队、出队等基本操作函数
2009-11-15 15:09
#include
#include
#define max 50
//队列的数据结构
typedef struct
{
int element[max];//队列的元素空间
int front;//头指针指示器
int rear;//尾指针指示器
}SeqQueue;
//函数声明表
void Print(SeqQueue *Q);
void Choose(int choice,SeqQueue *Q); void InitQueue(SeqQueue *Q);
int EnterQueue(SeqQueue *Q,int x); int DeleteQueue(SeqQueue *Q,int *x);
void PrintQueue(SeqQueue *Q);
//主函数
int main()
{
SeqQueue Q;
InitQueue(&Q);
system("color a");//系统变色为浅绿
Print(&Q);
while(true)
{
printf("Press enter to continue.........");
getchar();
getchar();
system("cls");
Print(&Q);
}
return 0;
}
//重复刷新并打印功能选项列表来模拟面向对象编程的等待命令操作
void Print(SeqQueue *Q)
{
int choice;
printf("Made By 杨梅树的盔甲~O(∩_∩)O~\n");
printf("---------------------\n");
printf("使用说明:本程序可实现顺序结构构建队列及队列的初始化、入队、出队等基本操作.\n");
printf("---------------------\n");
printf("1.入队.\n");
printf("2.出队.\n");
printf("3.打印输出当前队列.\n");
printf("4.按其它任意键退出.\n");
printf("---------------------\n");
printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice,Q);
}
//选择功能函数
void Choose(int choice,SeqQueue *Q)
{
int i;
int n;
int x=0;
switch(choice)
{
case 1:
printf("请输入要入队的元素个数:");
scanf("%d",&n);
printf("请依次输入要入队的%d个元素:\n",n); for(i=1;i<=n;i++)
{
scanf("%d",&x);
EnterQueue(Q,x);
}
printf("入队成功!\n");
break;
case 2:
printf("请输入要出队的元素个数:");
scanf("%d",&n);
printf("出队的%d个元素依次为:\n",n);
while(n--)
{
DeleteQueue(Q,&x);
printf("%d ",x);
}
printf("\n");
printf("出队成功!\n");
break;
case 3:
PrintQueue(Q);
break;
default:
exit(0);
}
}
//初始化队列函数
void InitQueue(SeqQueue *Q)
{
//将*Q初始化为一个空的循环队列
Q->front=Q->rear=0;
}
//入队函数
int EnterQueue(SeqQueue *Q,int x)
{
//将元素x入队
if((Q->rear+1)%max==Q->front)//队列已经满了{
return false;
}
Q->element[Q->rear]=x;
Q->rear=(Q->rear+1)%max;//重置尾指针
return true;
}
//出队函数
int DeleteQueue(SeqQueue *Q,int *x)
{
//删除队列的队头元素,用x返回其值
if(Q->front==Q->rear)//队列为空
return false;
*x=Q->element[Q->front];
Q->front=(Q->front+1)%max;//重新设置队头指针return true;
}
//打印输出队列
void PrintQueue(SeqQueue *Q)
{
int i;
for(i=Q->front;i
{
printf("%d ",Q->element[i]);
}
printf("\n");