第七周 项目4 队列数组

来源:互联网 发布:戏子家事天下知 编辑:程序博客网 时间:2024/05/21 19:47

问题及描述:

/*        烟台大学计控学院         作    者:白晓娟     完成日期:2016.10.08     问题描述:创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。      要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。      */    

liqueue.h:

#ifndef LIQUEUE_H_INCLUDED      #define LIQUEUE_H_INCLUDED      typedef int 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 // LIQUEUE_H_INCLUDED    

liqueue.cpp:

#include"liqueue.h"      #include<stdio.h>      #include<malloc.h>      void InitQueue(LiQueue *&q)  //初始化链队      {          q=(LiQueue *)malloc(sizeof(LiQueue));          q->front=q->rear=NULL;      }      void DestroyQueue(LiQueue *&q) //销毁链队      {          QNode *p=q->front,*r;          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;              q->rear=p;          }      }      bool deQueue(LiQueue *&q,ElemType &e)   //出队      {          QNode *t;          if(q->rear==NULL)              return false;              t=q->front;              if(q->front==q->rear)                  q->front=q->rear=NULL;              else                  q->front=q->front->next;              e=t->data;              free(t);              return true;      }      

main.cpp:

  #include <stdio.h>      #include<malloc.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
原创粉丝点击