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

来源:互联网 发布:怎么查询域名 编辑:程序博客网 时间:2024/06/03 18:35

问题及代码:

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

sqqueue.h

#ifndef SQQUEUE_H_INCLUDED    #define SQQUEUE_H_INCLUDED    #define MaxSize 5    typedef char 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  


sqqueue.cpp

#include "sqqueue.h"#include <malloc.h>#include <stdio.h>void InitQueue(SqQueue *&q) //初始化顺序环形队列    {q=(SqQueue *)malloc(sizeof(SqQueue));q->front=q->rear=-1;}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==MaxSize-1)return false;q->rear++;q->data[q->rear]=e;return true;}bool deQueue(SqQueue *&q,ElemType &e)//出队   {if(q->front==q->rear)return false;q->front++;e=q->data[q->front];return true;} 



main.cpp

#include"sqqueue.h" #include <malloc.h>   #include<stdio.h>    int main()    {        ElemType a,x;        SqQueue *qu;        InitQueue(qu);        while(1){  printf("输入队列的值:");  scanf("%d",&a);   if(a>0)   {   if(!enQueue(qu,a))       printf("队列满。");    }   else if(a<0)   {   if(!deQueue(qu,x))   printf("队列为空。");   }   else    break;}    return 0;    }    

运行结果:

知识点总结:

顺序队列的存储问题,入队和出队。

0 0