第七周项目二 定义链队存储结构,实现其基本运算.

  1. 烟台大学计算机学院  
  2.   
  3. 作者:王雪行
  4.   
  5. 问题描述:定义链队存储结构,实现其基本运算,并完成测试。 
  6.   
  7. 输入描述:无 
  8.   
  9. 输出描述:队列元素,出列入列元素测试结果 
  10.   
  11. */   
  12.   
  13.   
  14. LQN.h:  
  15.   
  16.   
  17. #include <stdio.h>  
  18. #include <malloc.h>  
  19. typedef int ElemType;  
  20.   
  21.   
  22. typedef struct qnode  
  23. {  
  24.     ElemType data;  
  25.   
  26.     struct qnode *next;  
  27. }DataNode;  
  28.   
  29.   
  30. typedef struct  
  31. {  
  32.     DataNode *front;  
  33.   
  34.     DataNode *rear;  
  35. }LinkQuNode;  
  36.   
  37.   
  38. void InitQueue(LinkQuNode *&q);  //初始化顺序环形队列  
  39. void DestroyQueue(LinkQuNode *&q); //销毁顺序环形队列  
  40. bool QueueEmpty(LinkQuNode *q);  //判断顺序环形队列是否为空  
  41. int QueueLength(LinkQuNode *q);   //返回队列中元素个数,也称队列长度  
  42. bool enQueue(LinkQuNode *&q,ElemType e);   //进队  
  43. bool deQueue(LinkQuNode *&q,ElemType &e);  //出队  
  44.   
  45.   
  46.   
  47. LQN.cpp:  
  48.   
  49. #include "LQN.h"  
  50.   
  51.   
  52. void InitQueue(LinkQuNode *&q)  
  53. {  
  54.     q=(LinkQuNode *)malloc(sizeof(LinkQuNode));  
  55.   
  56.     q->front=q->rear=NULL;  
  57. }  
  58.   
  59. void DestroyQueue(LinkQuNode *&q)  
  60. {  
  61.     DataNode *pre=q->front,*p;  
  62.   
  63.     if(pre!=NULL)  
  64.     {  
  65.         p=pre->next;  
  66.   
  67.         while(p!=NULL)  
  68.         {  
  69.             free(pre);  
  70.             pre=p;  
  71.             p=p->next;  
  72.         }  
  73.         free(pre);  
  74.     }  
  75.   
  76.     free(q);  
  77.   
  78. }  
  79.   
  80. bool QueueEmpty(LinkQuNode *q)  
  81. {  
  82.     return(q->rear==NULL);  
  83. }  
  84.   
  85. int QueueLength(LinkQuNode *q)  
  86. {  
  87.     int i=0;  
  88.   
  89.     DataNode *p;  
  90.   
  91.     p=q->front;  
  92.   
  93.     while(p!=NULL)  
  94.     {  
  95.         i++;  
  96.   
  97.         p=p->next;  
  98.     }  
  99.   
  100.     return i;  
  101. }  
  102. bool enQueue(LinkQuNode *&q,ElemType e)  
  103. {  
  104.     DataNode *p;  
  105.   
  106.     p=(DataNode*)malloc(sizeof(DataNode));  
  107.   
  108.     p->data=e;  
  109.   
  110.     p->next=NULL;  
  111.   
  112.     if(q->rear==NULL)  
  113.     {  
  114.         q->front=q->rear=p;  
  115.     }  
  116.     else  
  117.     {  
  118.         q->rear->next=p;  
  119.         q->rear=p;  
  120.     }  
  121. }  
  122. bool deQueue(LinkQuNode *&q,ElemType &e)  
  123. {  
  124.     DataNode *t;  
  125.   
  126.     if(q->rear==NULL)  
  127.         return false;  
  128.   
  129.     t=q->front;  
  130.   
  131.     if(q->front==q->rear)  
  132.   
  133.     q->front=q->rear=NULL;  
  134.    else  
  135.     q->front=q->front->next;  
  136.     e=t->data;  
  137.   
  138.     free(t);  
  139.   
  140.     return true;  
  141. }  
  142.   
  143.   
  144.   
  145. main:  
  146.   
  147. #include <stdio.h>  
  148. #include "LQN.h"  
  149.   
  150. int main()  
  151. {  
  152.     ElemType e;  
  153.     LinkQuNode *q;  
  154.     printf("(1)初始化链队q\n");  
  155.     InitQueue(q);  
  156.     printf("(2)依次进链队元素a,b,c\n");  
  157.     enQueue(q,'a');  
  158.     enQueue(q,'b');  
  159.     enQueue(q,'c');  
  160.     printf("(3)链队为%s\n",(QueueEmpty(q)?"空":"非空"));  
  161.     if (deQueue(q,e)==0)  
  162.         printf("队空,不能出队\n");  
  163.     else  
  164.         printf("(4)出队一个元素%c\n",e);  
  165.     printf("(5)链队q的元素个数:%d\n",QueueLength(q));  
  166.     printf("(6)依次进链队元素d,e,f\n");  
  167.     enQueue(q,'d');  
  168.     enQueue(q,'e');  
  169.     enQueue(q,'f');  
  170.     printf("(7)链队q的元素个数:%d\n",QueueLength(q));  
  171.     printf("(8)出链队序列:");  
  172.     while (!QueueEmpty(q))  
  173.     {  
  174.         deQueue(q,e);  
  175.         printf("%c ",e);  
  176.     }  
  177.     printf("\n");  
  178.     printf("(9)释放链队\n");  
  179.     DestroyQueue(q);  
  180.     return 0;  
  181. }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值