fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. struct qnode {
  5. char data;
  6. struct qnode* next;
  7. };
  8.  
  9. typedef struct {
  10. struct qnode* head;
  11. struct qnode* tail;
  12. unsigned cnt;
  13. } queue_t;
  14.  
  15. void queue_init(queue_t* qc);
  16. int queue_push(queue_t* qc, char ch);
  17. void queue_pop(queue_t* qc);
  18. void queue_clear(queue_t* qc);
  19.  
  20. int queue_empty(queue_t* qc) { return (qc->head == NULL); }
  21. char queue_front(queue_t* qc) { return qc->head->data; }
  22. unsigned queue_size(queue_t* qc) { return qc->cnt; }
  23.  
  24. int main(void){
  25. char c;
  26. queue_t q;
  27. queue_init(&q);
  28.  
  29. for(c = 'A'; c <= 'Z'; ++c)
  30. queue_push(&q, c);
  31.  
  32. while(! queue_empty(&q)){
  33. printf("%c", queue_front(&q));
  34. queue_pop(&q);
  35. }
  36. queue_clear(&q);
  37. return 0;
  38. }
  39.  
  40. //инициализация
  41. void queue_init(queue_t* qc){
  42. qc->head = qc->tail = NULL;
  43. qc->cnt = 0;
  44. }
  45.  
  46. //вставка
  47. int queue_push(queue_t* qc, char ch){
  48. struct qnode* p = (struct qnode*)malloc(sizeof(struct qnode));
  49. if(p == NULL)
  50. return 0;
  51.  
  52. p->data = ch;
  53. p->next = NULL;
  54.  
  55. if(qc->head == NULL)
  56. qc->head = qc->tail = p;
  57. else {
  58. qc->tail->next = p;
  59. qc->tail = p;
  60. }
  61. ++(qc->cnt);
  62. return 1;
  63. }
  64.  
  65. //вытолкнуть
  66. void queue_pop(queue_t* qc){
  67. struct qnode* t;
  68. if(qc->head != NULL){
  69. t = qc->head;
  70. qc->head = qc->head->next;
  71. free(t);
  72.  
  73. --(qc->cnt);
  74. if(qc->head == NULL)
  75. qc->tail = NULL;
  76. }
  77. }
  78.  
  79. //удалить всё
  80. void queue_clear(queue_t* qc){
  81. while(! queue_empty(qc))
  82. queue_pop(qc);
  83. }
  84.  
Success #stdin #stdout 0s 2288KB
stdin
Standard input is empty
stdout
ABCDEFGHIJKLMNOPQRSTUVWXYZ