第七周 项目4-队列数组

来源:互联网 发布:网络侵权管辖法院 编辑:程序博客网 时间:2024/06/14 19:59
/*Copyright (c)2016,烟台大学计算机与控制工程学院All rights reserved.文件名称:项目1.cbp作    者:滕健完成日期:2016年10月8日问题描述:创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作           为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的           非空队列。 要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只           包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。 输入描述:若干整数 程序输出:0-9队列出队结果 */  liqueue.h头文件代码      #ifndef SQQUEUE_H_INCLUDED    #define SQQUEUE_H_INCLUDED            #include <stdio.h>    #include <malloc.h>    #define MaxSize 5    typedef char ElemType;    typedef struct qnode //数据节点    {        ElemType data;        struct qnode *next;    } QNode;    typedef struct //链队节点    {        QNode *front;        QNode *rear;    } LiQueue;    void InitQueue(LiQueue *&q);    //初始化链队    void DestroyQueue(LiQueue *&q);     //销毁链队    bool QueueEmpty(LiQueue *q);    //判断链队是否为空    int  QueueLength(LiQueue *q);    //返回队列中元素个数,也称队列长度    void enQueue(LiQueue *&q,ElemType e);   //进队    bool deQueue(LiQueue *&q,ElemType &e);  //出队    #endif // SQQUEUE_H_INCLUDED    liqueue.h是链队的一个算法库集合,里面声明了常用到的各个功能函数。  liqueue.cpp文件代码    //链队基本运算函数    #include "liqueue.h"            void InitQueue(LiQueue *&q)  //初始化链队    {        q=(LiQueue *)malloc(sizeof(LiQueue));        q->front=q->rear=NULL;    }    void DestroyQueue(LiQueue *&q)  //销毁链队    {        QNode *p=q->front,*r;   //p指向队头数据节点        if (p!=NULL)            //释放数据节点占用空间        {            r=p->next;            while (r!=NULL)            {                free(p);                p=r;                r=p->next;            }        }        free(p);        free(q);                //释放链队节点占用空间    }    bool QueueEmpty(LiQueue *q)  //判断链队是否为空    {        return(q->rear==NULL);    }    int QueueLength(LiQueue *q)  //返回队列中数据元素个数    {        int n=0;        QNode *p=q->front;        while (p!=NULL)        {            n++;            p=p->next;        }        return(n);    }    void enQueue(LiQueue *&q,ElemType e)  //入队    {        QNode *p;        p=(QNode *)malloc(sizeof(QNode));        p->data=e;        p->next=NULL;        if (q->rear==NULL)      //若链队为空,则新节点是队首节点又是队尾节点            q->front=q->rear=p;        else        {            q->rear->next=p;    //将*p节点链到队尾,并将rear指向它            q->rear=p;        }    }    bool deQueue(LiQueue *&q,ElemType &e)   //出队    {        QNode *t;        if (q->rear==NULL)      //队列为空            return false;        t=q->front;             //t指向第一个数据节点        if (q->front==q->rear)  //队列中只有一个节点时            q->front=q->rear=NULL;        else                    //队列中有多个节点时            q->front=q->front->next;        e=t->data;        free(t);        return true;    }    liqueue.cpp对应liqueue.h中声明的各个功能函数,给出了各个功能函数的实现方法。    #include "liqueue.h"  #define N 10      int main()  {      int i, a;      LiQueue *qu[N]; //定义队列指针数组      for (i=0; i<N; i++)          InitQueue(qu[i]);       //初始化队列          //为队列中加入值      printf("输入若干正整数,以0结束: ");      scanf("%d", &a);      while(a)      {          enQueue(qu[a%10], a);          scanf("%d", &a);      }          //输出各个队列      printf("按个位数整理到各个队列中后,各队列出队的结果是: \n");      for (i=0; i<N; i++)      {          printf("qu[%d]: ", i);          while(!QueueEmpty(qu[i]))          {              deQueue(qu[i], a);              printf("%d ", a);          }          printf("\n");      }          //销毁各个队列      for (i=0; i<N; i++)          DestroyQueue(qu[i]);      return 0;  }  运行结果:

知识点总结:

通过队列解决具体应用问题。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 家兔在笼子里下崽怎么办 小兔子不吃东西 精神不好怎么办 兔子要生宝宝了怎么办 宝宝让兔子咬了怎么办 兔子的右耳坏了怎么办 被小兔子咬了怎么办 打老鼠被老鼠咬了了怎么办 制作棒棒糖时木棍翘起怎么办 兔子被打后怕我怎么办 兔子后腿摔断了怎么办 兔子腿骨头断了怎么办 减肥老是控制不住吃怎么办 不爱吃主食爱吃零食怎么办 猫咪奶涨的很硬怎么办 斩魂技能乱加的怎么办 狗狗不吃东西还拉稀怎么办 狗狗拉稀不吃饭怎么办 狗狗几天不吃东西怎么办 狗狗不吃不喝怎么办 拖鞋洗了有臭味怎么办 拖鞋湿水了很臭怎么办 棉被上渗了酸奶怎么办 酸奶弄在衣服上怎么办 孩子把褥子尿湿怎么办 小孩尿过的褥子怎么办 包包放着发霉了怎么办 被套盖久了发黄怎么办 小白鞋里面发霉怎么办 棉被淋了一点雨怎么办 苹果手机被拉进电话群怎么办 墙上的插座烧了怎么办 富士康早退4分钟怎么办 我老婆起泡疹腿剌痛睡不着了怎么办 oppo耳机孔坏了怎么办 魅族耳机口坏了怎么办 控制线的报验资料怎么办 人失踪报警派出所不管怎么办 铁板的货架久了怎么办 干镀锌让环保查了怎么办 水管软管生锈了拧不动怎么办 镀锌管会生锈吗.怎么办