灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:6689回复:0

C语言学习之队列操作

楼主#
更多 发布于:2015-02-12 12:53

文章作者:qlx846852708

本文件为队列操作的接口:

/*queue.h*/

[cpp] view plaincopyprint?

  1. #ifndef _SEqqUEUE_H_
  2. #define _SEQQUEUE_H_
  3. #define QUEUE_MAX 15
  4. typedef struct
  5. {
  6. int number; //顾客编号
  7. long time;//进入时间
  8. }DATATYPE_T;
  9. typedef struct
  10. {
  11. DATATYPE_T data[QUEUE_MAX]; //队列数组
  12. int head; //队列头
  13. int tail; //队列尾
  14. }SEQQUEUE;
  15. /*队列是否为空*/
  16. int queue_empty(SEQQUEUE *queue);
  17. /*队列是否满*/
  18. int queue_full(SEQQUEUE *queue);
  19. /*队列初始化*/
  20. SEQQUEUE *queue_init();
  21. /*进队列*/
  22. int queue_push(SEQQUEUE *queue,DATATYPE_T data);
  23. /*出队列*/
  24. DATATYPE_T *queue_pop(SEQQUEUE *queue);
  25. /* 获取队列的第一个元素*/
  26. DATATYPE_T *get_queue_first_element(SEQQUEUE *queue);
  27. /*获取队列的长度*/
  28. int get_queue_length(SEQQUEUE *queue);
  29. /*释放队列*/
  30. void queue_free(SEQQUEUE *queue);
  31. /*显示队列信息*/
  32. int show_queue_info(SEQQUEUE *queue);
  33. #endif

 

/*queue.c*/

[cpp] view plaincopyprint?

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "seqQueue.h"
  5. /*队列是否为空*/
  6. int queue_empty(SEQQUEUE *queue)
  7. {
  8. return (queue->head==queue->tail);
  9. }
  10. /*队列是否满*/
  11. int queue_full(SEQQUEUE *queue)
  12. {
  13. return (queue->tail==QUEUE_MAX);
  14. }
  15. /*队列初始化*/
  16. SEQQUEUE *queue_init()
  17. {
  18. SEQQUEUE *queue=NULL;
  19. queue = malloc(sizeof(SEQQUEUE));
  20. if(queue == NULL)
  21. {
  22. printf("malloc failedn");
  23. return NULL;
  24. }
  25. queue->head = 0;
  26. queue->tail = 0;
  27. return queue;
  28. }
  29. /*进队列*/
  30. int queue_push(SEQQUEUE *queue,DATATYPE_T data)
  31. {
  32. int ret = 0;
  33. ret = queue_full(queue);
  34. if(ret!=0)
  35. {
  36. printf("the queue is fulln");
  37. return -1;
  38. }
  39. queue->tail++;
  40. queue->data[queue->tail] = data;
  41. return 0;
  42. }
  43. /*出队列*/
  44. DATATYPE_T *queue_pop(SEQQUEUE *queue)
  45. {
  46. int ret = 0;
  47. ret = queue_empty(queue);
  48. if(ret!=0)
  49. {
  50. printf("the queue is emptyn");
  51. return NULL;
  52. }
  53. queue->head++;
  54. return &(queue->data[queue->head]);
  55. }
  56. /* 获取队列的第一个元素*/
  57. DATATYPE_T *get_queue_first_element(SEQQUEUE *queue)
  58. {
  59. int ret = 0;
  60. ret = queue_empty(queue);
  61. if(ret!=0)
  62. {
  63. printf("the queue is emptyn");
  64. return NULL;
  65. }
  66. return &(queue->data[queue->head]);
  67. }
  68. /*获取队列的长度*/
  69. int get_queue_length(SEQQUEUE *queue)
  70. {
  71. return ((queue->tail)-(queue->head));
  72. }
  73. /*释放队列*/
  74. void queue_free(SEQQUEUE *queue)
  75. {
  76. if(queue!=NULL)
  77. {
  78. free(queue);
  79. queue = NULL;
  80. }
  81. }
  82. /*显示队列全部信息 */
  83. int show_queue_info(SEQQUEUE *queue)
  84. {
  85. int i = 0;
  86. for(i=queue->head+1;i<(queue->tail+1);i++)
  87. {
  88. printf("num:%d,time:%dn",queue->data.number,queue->data.time);
  89. }
  90. return 0;
  91. }


喜欢0 评分0
游客

返回顶部