循环队列,出队,入队

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;irear;i++)

{

printf("%d ",Q->element[i]);

}

printf("\n");

相关文档
最新文档