第七周 项目3-负数把正数赶出队列
2015-10-18 13:33
232 查看
/*
*Copyright(c) 2015, 烟台大学计算机学院
*All rights reserved.
*文件名称:建立顺序环形队列算法库.cpp
*作 者:周洁
*完成日期:2015年 10月19日
*版 本 号:
*
*问题描述:设从键盘输入一整数序列a1,a2,…an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,使用环形队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。当进队出队异常(如队满)时,要打印出错信息。
*输入描述:若干数字
*程序输出:若干数字
*/
代码:
(1)头文件 s.h
#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)源文件 s.cpp
#include <stdio.h>
#include <malloc.h>
#include "s.h"
void InitQueue(SqQueue *&q) //初始化顺序环形队列
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
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;
}
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;
}
运行结果:
知识点总结:
环形队列的应用,进队和出队。
*Copyright(c) 2015, 烟台大学计算机学院
*All rights reserved.
*文件名称:建立顺序环形队列算法库.cpp
*作 者:周洁
*完成日期:2015年 10月19日
*版 本 号:
*
*问题描述:设从键盘输入一整数序列a1,a2,…an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,使用环形队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。当进队出队异常(如队满)时,要打印出错信息。
*输入描述:若干数字
*程序输出:若干数字
*/
代码:
(1)头文件 s.h
#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)源文件 s.cpp
#include <stdio.h>
#include <malloc.h>
#include "s.h"
void InitQueue(SqQueue *&q) //初始化顺序环形队列
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
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;
}
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;
}
运行结果:
知识点总结:
环形队列的应用,进队和出队。
相关文章推荐
- super与this的用法
- wke升级vs2010,vs2013
- 关于Android 性能优化的整理
- 实现lamp docker数据容器(mysql)与应用容器(apache+php)独立运行
- 【SQL】求两个日期值之间的工作天数
- Invalid result location value/parameter 解决办法
- support design开发控件
- Android系统介绍与框架(转)
- 不一样的是不一样的,我的独家滚动条------Day35
- Eclipse无法检测到手机的解决方法
- Smarty标签变量来源
- 存储过程 和 函数 区别
- 做小图标还用sprite图?你out了!史上最简单易懂iconfont使用教程
- 信息安全系统设计基础第五周学习总结
- Java三目运算符注意事项
- windows下使用GUI 把本地代码提交到git远程仓库
- C语言输入输出整数
- C语言输入输出整数
- 关于rt.jar找不到
- 动态调入xib视图