第七周项目2-建立链队算法库

来源:互联网 发布:淘宝网男士皮欧上衣 编辑:程序博客网 时间:2024/06/01 08:52
/*   Copyright (c)2016,烟台大学计算机与控制工程学院   All rights reserved.   文件名称:作    者:王曼 完成日期:2016年10月13日   版 本 号:v1.0   问题描述:定义链队列存储结构,实现其基本运算,并完成测试。   输入描述:无   程序输出:测试数据   */        

liqueue.h中的代码:

#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);  //出队  

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;      }      
main.cpp中的代码:
int main()      {          ElemType e;          LiQueue *q;          printf("(1)初始化队列q\n");          InitQueue(q);          printf("(2)依次进队列元素a,b,c\n");          //进a、b、c          enQueue(q,'a');          enQueue(q,'b');          enQueue(q,'c');          printf("(3)队列为%s\n",(QueueEmpty(q)?"空":"非空"));          if (deQueue(q,e)==0)              printf("队空,不能出队\n");          else              printf("(4)出队一个元素%c\n",e);          printf("(5)队列q的元素个数:%d\n",QueueLength(q));          printf("(6)依次进队列元素d,e,f\n");          //进d、e、f          enQueue(q,'d');          enQueue(q,'e');          enQueue(q,'f');          printf("(7)队列q的元素个数:%d\n",QueueLength(q));          printf("(8)出队列序列:");          while (!QueueEmpty(q))          {              deQueue(q,e);              printf("%c ",e);          }          printf("\n");          printf("(9)释放队列\n");          DestroyQueue(q);          return 0;      }      

运行结果



知识点总结:

在顺序队算法的基础上定义了链队算法库。

学习心得:

链队中没有队满的情况。


0 0
原创粉丝点击