Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68621
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 154
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 22:56
个人简介

不卑不亢

文章分类

全部博文(17)

文章存档

2016年(1)

2015年(13)

2014年(3)

分类: C/C++

2015-03-21 14:23:41


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define DEBUG 1

  4. typedef struct _queue_ {
  5.     int *data;
  6.     int head;
  7.     int tail;
  8.     int tlen;
  9. }queue_t;

  10. queue_t *queue_init(int len);
  11. void queue_destory(queue_t *queue);
  12. int queue_enqueue(queue_t *queue, int value);
  13. int queue_dequeue(queue_t *queue, int *value);
  14. int queue_isempty(queue_t *queue);
  15. int queue_isfull(queue_t *queue);
  16. int queue_getlen(queue_t *queue);
  17. #if DEBUG
  18. void _queue_debug_(queue_t *queue);
  19. #endif

  20. int main()
  21. {
  22.     int value = 100;
  23.     queue_t *queue = NULL;

  24.     queue = queue_init(10);

  25.     puts("Enqueue:");
  26.     while (-1 != queue_enqueue(queue, value)) {
  27.         printf("%5d", value);
  28.         value += 100;
  29.     }
  30.     putchar('\n');
  31.     
  32.     printf("Clen: %d\n", queue_getlen(queue));

  33. #if DEBUG
  34.     _queue_debug_(queue);
  35. #endif

  36.     puts("Dequeue:");
  37.     while (-1 != queue_dequeue(queue, &value))
  38.         printf("%5d", value);
  39.     putchar('\n');

  40. #if DEBUG
  41.     _queue_debug_(queue);
  42. #endif

  43.     queue_destory(queue);
  44.     return 0;
  45. }

  46. queue_t *queue_init(int len)
  47. {
  48.     queue_t *queue = NULL;

  49.     queue = (queue_t *)malloc(sizeof(queue_t));
  50.     queue->tlen = len;
  51.     queue->head = 0;
  52.     queue->tail = 0;
  53.     queue->data = (int *)malloc(sizeof(int) * len);

  54.     return queue;
  55. }

  56. void queue_destory(queue_t *queue)
  57. {
  58.     free(queue->data);
  59.     free(queue);
  60. }

  61. int queue_enqueue(queue_t *queue, int value)
  62. {
  63.     if (queue_isfull(queue))
  64.         return -1;

  65.     queue->data[queue->tail] = value;
  66.     queue->tail = (queue->tail + 1) % queue->tlen;

  67.     return 0;
  68. }

  69. int queue_isfull(queue_t *queue)
  70. {
  71.     if ((queue->tail + 1) % queue->tlen == queue->head)
  72.         return 1;
  73.     return 0;
  74. }

  75. int queue_dequeue(queue_t *queue, int *value)
  76. {
  77.     if (queue_isempty(queue))
  78.         return -1;
  79.     
  80.     *value = queue->data[queue->head];
  81.     queue->head = (queue->head + 1) % queue->tlen;

  82.     return 0;
  83. }

  84. int queue_isempty(queue_t *queue)
  85. {
  86.     if (queue->head == queue->tail)
  87.         return 1;
  88.     return 0;
  89. }

  90. int queue_getlen(queue_t *queue)
  91. {
  92.     if (queue->head == queue->tail)
  93.         return 0;
  94.     else if (queue->tail > queue->head)
  95.         return queue->tail - queue->head;
  96.     else
  97.         return queue->tlen - queue->head + queue->tail;
  98. }

  99. #if DEBUG
  100. void _queue_debug_(queue_t *queue)
  101. {
  102.     int index;

  103.     puts("--------------- QUEUE_DEBUG -------------------");
  104.     printf("tlen: %d\thead: %d\ttail: %d\n",
  105.             queue->tlen, queue->head, queue->tail);
  106.     for (index = 0; index < queue->tlen; index++)
  107.         printf("%5d", queue->data[index]);
  108.     puts("\n-----------------------------------------------");
  109. }
  110. #endif

阅读(1066) | 评论(0) | 转发(0) |
0

上一篇:多项式问题

下一篇:链式队列

给主人留下些什么吧!~~