Advertisement
cd62131

Queue

Jul 14th, 2014
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct st_cell {
  4.   int data;
  5.   struct st_cell *next;
  6. } CELL;
  7. // 待ち行列の末尾にセルを追加する関数
  8. // head : 待ち行列の先頭へのポインタ
  9. // tail : 待ち行列の末尾へのポインタ
  10. // data : セルに格納するデータ
  11. void enqueue(CELL *head, CELL *tail, int data) {
  12.   CELL *cell = (CELL *) malloc(sizeof(CELL));
  13.   cell->data = data;
  14.   if (head->next == NULL) {
  15.     cell->next = NULL;
  16.     head->next = cell;
  17.   } else {
  18.     tail->next->next = cell;
  19.   }
  20.   tail->next = cell;
  21. }
  22. // 待ち行列の先頭のセルを削除する関数
  23. // head : 待ち行列の先頭へのポインタ
  24. // tail : 待ち行列の末尾へのポインタ
  25. // 戻り値 : 先頭のセルに格納されていたデータ
  26. int dequeue(CELL *head, CELL *tail) {
  27.   CELL *tmp;
  28.   int data;
  29.   data = head->next->data;
  30.   tmp = head->next;
  31.   head->next = head->next->next;
  32.   free(tmp);
  33.   return data;
  34. }
  35. // 待ち行列に残っているすべてのセルを削除する関数
  36. // head : 待ち行列の先頭へのポインタ
  37. void clear(CELL *head) {
  38.   CELL *tmp;
  39.   while (head->next != NULL) {
  40.     tmp = head->next;
  41.     head->next = head->next->next;
  42.     free(tmp);
  43.   }
  44. }
  45. void puts_queue(CELL *head) {
  46.   CELL *p;
  47.   printf("[");
  48.   for (p = head->next; p; p = p->next) {
  49.     printf("%d", p->data);
  50.     if (p->next) printf(", ");
  51.   }
  52.   printf("]\n");
  53. }
  54. int main(void) {
  55.   int i;
  56.   CELL head, tail;
  57.   head.next = NULL;
  58.   tail.next = NULL;
  59.   puts_queue(&head);
  60.   for (i = 0; i < 5; i++) {
  61.     enqueue(&head, &tail, i);
  62.     puts_queue(&head);
  63.   }
  64.   i = dequeue(&head, &tail); printf("%d: ", i); puts_queue(&head);
  65.   clear(&head); puts_queue(&head);
  66.   return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement