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

来源:互联网 发布:淘宝c店店招全屏代码 编辑:程序博客网 时间:2024/05/29 17:33

问题及描述:

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

代码:

main.cpp:

#include <stdio.h>      #include <malloc.h>      #include "sqqueueu.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;      }    

sqqueueu.cpp

#include"sqqueueu.h"      #include<stdio.h>      #include<malloc.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;      }

sqqueueu.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      
运行结果:


知识点总结:
while语句的运用和队列的基本算法。
心得体会:
理解了知识点。


0 0