fork download
  1. //Queue ADT Types Definitions
  2. #include <stdbool.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct node
  6. {
  7. void* dataPtr;
  8. struct node* next;
  9. } QUEUE_NODE;
  10. typedef struct
  11. {
  12. QUEUE_NODE* front;
  13. QUEUE_NODE* rear;
  14. int count;
  15. }QUEUE; //metadata
  16.  
  17. //Prototype
  18. QUEUE* createQueue(void);
  19. QUEUE* destroyQueue(QUEUE* queue);
  20.  
  21. bool dequeue(QUEUE* queue, void** itemPtr);
  22. bool enqueue(QUEUE* queue, void* itemPtr);
  23. bool queueFront(QUEUE* queue, void** itemPtr);
  24. bool queueRear(QUEUE* queue, void** itemPtr);
  25. int queueCount(QUEUE* queue);
  26.  
  27. bool emptyQueue(QUEUE* queue);
  28. bool fullQueue(QUEUE* queue);
  29. //End of Queue ADT Definitions
  30.  
  31. //CreateQueue
  32. QUEUE* createQueue(void)
  33. {
  34. QUEUE* queue;
  35.  
  36. queue = (QUEUE*)malloc(sizeof(QUEUE));
  37. if (queue)
  38. {
  39. queue->front = NULL;
  40. queue->rear = NULL;
  41. queue->count = 0;
  42. } //if
  43. return queue;
  44. }//createQueue
  45.  
  46. //Enqueue
  47. bool enqueue(QUEUE* queue, void* itemPtr)
  48. {
  49. QUEUE_NODE* newPtr;
  50.  
  51. if (!(newPtr =
  52. (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE))))
  53. return false;
  54.  
  55. newPtr->dataPtr = itemPtr;
  56. newPtr->next = NULL;
  57.  
  58. if (queue->count == 0)
  59. //inserting into null queue
  60. queue->front = newPtr;
  61. else
  62. queue->rear->next = newPtr;
  63.  
  64. (queue->count)++;
  65. queue->rear = newPtr;
  66. return true;
  67. }//enqueue
  68.  
  69. //Dequeue
  70. bool dequeue(QUEUE* queue, void** itemPtr)
  71. {
  72. QUEUE_NODE* deleteLoc;
  73.  
  74. if (!queue->count)
  75. return false;
  76.  
  77. *itemPtr = queue->front->dataPtr;
  78. deleteLoc = queue->front;
  79. if (queue->count == 1)
  80. //Deleting only item in queue
  81. queue->rear = queue->front = NULL;
  82. else
  83. queue->front = queue->front->next;
  84. (queue->count)--;
  85. free(deleteLoc);
  86.  
  87. return true;
  88. }//dequeue
  89.  
  90. //queueFront
  91. bool queueFront(QUEUE* queue, void** itemPtr)
  92. {
  93. if (!queue->count)
  94. return false;
  95. else
  96. {
  97. *itemPtr = queue->front->dataPtr;
  98. return true;
  99. }//else
  100. }//queueFront
  101.  
  102. //queueRear
  103. bool queueRear(QUEUE* queue, void** itemPtr)
  104. {
  105. if (!queue->count)
  106. return false;
  107. else
  108. {
  109. *itemPtr = queue->rear->dataPtr;
  110. return true;
  111. }
  112. }//queueRear
  113.  
  114. //emptyQueue
  115. bool emptyQueue(QUEUE* queue)
  116. {
  117. return (queue->count == 0);
  118. }//emptyQueue
  119.  
  120. //fullQueue
  121. bool fullQueue(QUEUE* queue)
  122. {
  123. QUEUE_NODE* temp;
  124.  
  125. temp = (QUEUE_NODE*)malloc(sizeof(*(queue->rear)));
  126. if (temp)
  127. {
  128. free(temp);
  129. return true;
  130. }//if
  131. //Heap Full
  132. return false;
  133. }//fullQueue
  134.  
  135. //destroyQueue
  136. QUEUE* destroyQueue(QUEUE* queue)
  137. {
  138. QUEUE_NODE* deletePtr;
  139.  
  140. if (queue)
  141. {
  142. while (queue->front != NULL)
  143. {
  144. free(queue->front->dataPtr);
  145. deletePtr = queue->front;
  146. queue->front = queue->front->next;
  147. free(deletePtr);
  148. }//while
  149. free(queue);
  150. }//if
  151. return NULL;
  152. }//destroyQueue
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty