您的位置:首页 > 其它

第七周项目3-负数把正数赶出队列

2016-10-13 11:02 218 查看
/*
* 烟台大学计算机与控制工程学院

* 作者:王雪松
* 完成日期:2016年10月13日

*

* 问题描述:设从键盘输入一整数序列a1,a2,…an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,使用算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接写在main函数中即可。当进队出队异常(如队满)时,要打印出错信息。
* 输入描述:无
* 程序输出:结果
*/

问题及代码:

  1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明;

[csharp] view
plain copy

#ifndef SQQUEUE_H_INCLUDED

#define SQQUEUE_H_INCLUDED

#define MaxSize 5

typedef int ElemType;

typedef struct

{

ElemType data[MaxSize];

int front,rear; /*队首和队尾指针*/

} SqQueue;

void InitQueue(SqQueue *&q); //初始化顺序环形队列

void DestroyQueue(SqQueue *&q); //销毁顺序环形队列

bool QueueEmpty(SqQueue *q); //判断顺序环形队列是否为空

int QueueLength(SqQueue *q); //返回队列中元素个数,也称队列长度

bool enQueue(SqQueue *&q,ElemType e); //进队

bool deQueue(SqQueue *&q,ElemType &e); //出队

#endif // SQQUEUE_H_INCLUDED

  2.源文件:sqqueue.cpp,包含实现各种算法的函数的定义

[csharp] view
plain copy

#include <stdio.h>

#include <malloc.h>

#include "sqqueue.h"

void InitQueue(SqQueue *&q) //初始化顺序环形队列

{

q=(SqQueue *)malloc (sizeof(SqQueue));

q->front=q->rear=0;

}

void DestroyQueue(SqQueue *&q) //销毁顺序环形队列

{

free(q);

}

bool QueueEmpty(SqQueue *q) //判断顺序环形队列是否为空

{

return(q->front==q->rear);

}

int QueueLength(SqQueue *q) //返回队列中元素个数,也称队列长度

{

return (q->rear-q->front+MaxSize)%MaxSize;

}

bool enQueue(SqQueue *&q,ElemType e) //进队

{

if ((q->rear+1)%MaxSize==q->front) //队满上溢出

return false;

q->rear=(q->rear+1)%MaxSize;

q->data[q->rear]=e;

return true;

}

bool deQueue(SqQueue *&q,ElemType &e) //出队

{

if (q->front==q->rear) //队空下溢出

return false;

q->front=(q->front+1)%MaxSize;

e=q->data[q->front];

return true;

}

  3.在同一项目(project)中建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 例:

[csharp] view
plain copy

#include <stdio.h>

#include <malloc.h>

#include "sqqueue.h"

int main()

{

ElemType a,x;

SqQueue *qu; //定义队列

InitQueue(qu); //队列初始化

while (1)

{

printf("输入a值(输入正数进队,负数出队,0结束):");

scanf("%d", &a);

if (a>0)

{

if (!enQueue(qu,a))

printf(" 队列满,不能入队\n");

}

else if (a<0)

{

if (!deQueue(qu, x))

printf(" 队列空,不能出队\n");

}

else

break;

}

return 0;

}

运行结果:



学习总结:

环形队列中:

队首指针进1:front=(front+1)%MaxSize;

队尾指针进1:rear=(rear+1)%MaxSize;



顶0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: