fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. /******************************
  4. Queue* q = newLinkedQueue();
  5. q->inQueue(q, 3);
  6. q->inQueue(q, 4);
  7. q->inQueue(q, 5);
  8. printf("%d\n",q->deQueue(q));
  9. printf("%d\n",q->deQueue(q));
  10. *********************************/
  11. typedef struct QueueNodeType
  12. {
  13. int data;
  14. struct QueueNodeType* nextNode;
  15. }QueueNode;
  16. typedef struct QueueType
  17. {
  18. QueueNode* head;
  19. QueueNode* tail;
  20. void (*inQueue) (struct QueueType* self, int data);
  21. int (*deQueue) (struct QueueType* self);
  22. void (*clear) (struct QueueType* self);
  23. }Queue;
  24. void appendQueue(Queue* self, int data);
  25. int popQueue(Queue* self);
  26. void clearQueue(Queue* self);
  27. Queue* newLinkedQueue()
  28. {
  29. Queue* q = (Queue*)malloc(sizeof(Queue));
  30. q->head = NULL;
  31. q->tail = NULL;
  32.  
  33. q->inQueue = appendQueue;
  34. q->deQueue = popQueue;
  35. q->clear = clearQueue;
  36. return q;
  37. }
  38. QueueNode* newQueueNode(int data)
  39. {
  40. QueueNode* node = (QueueNode*) malloc(sizeof(QueueNode));
  41. node->nextNode = NULL;
  42. node->data = data;
  43.  
  44. return node;
  45. }
  46. void appendQueue(Queue* self, int data)
  47. {
  48. if( self->head == NULL )
  49. {
  50. self->head = newQueueNode(data);
  51. self->tail = self->head;
  52. }
  53. else
  54. {
  55. self->tail->nextNode = newQueueNode(data);
  56. self->tail = self->tail->nextNode;
  57. }
  58. }
  59. int popQueue(Queue* self)
  60. {
  61. int retn = self->head->data;
  62. void* temp = self->head;
  63.  
  64. self->head = self->head->nextNode;
  65.  
  66. free(temp);
  67. return retn;
  68. }
  69. void clearQueue(Queue* self)
  70. {
  71. while(self->head != NULL)
  72. {
  73. self->deQueue(self);
  74. }
  75. }
  76. void deleteLinkedQueue(Queue* q)
  77. {
  78. q->clear(q);
  79. free(q);
  80. }
  81. int main(void)
  82. {
  83. Queue* q = newLinkedQueue();
  84. q->inQueue(q, 3);
  85. q->inQueue(q, 4);
  86. q->inQueue(q, 5);
  87. printf("%d\n",q->deQueue(q));
  88. printf("%d\n",q->deQueue(q));
  89. }
Runtime error #stdin #stdout 0s 2424KB
stdin
Standard input is empty
stdout
3
4