Advertisement
Guest User

nate

a guest
Mar 22nd, 2018
1,010
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. // DO NOT MODIFY THIS STRUCTURE
  2. struct dequeue {
  3. int front;
  4. int back;
  5. int len;
  6. int maxlen;
  7. int *queue;
  8. };
  9.  
  10.  
  11. struct dequeue *dequeue_create(void) {
  12. struct dequeue *dq = malloc(sizeof(int));
  13. dq->front = 0; //indexes
  14. dq->back = 2;
  15. dq->len = 1;
  16. dq->maxlen = 3;
  17. dq->queue = malloc(sizeof(int));
  18. }
  19.  
  20.  
  21. bool dequeue_is_empty(const struct dequeue *q) {
  22. assert(q);
  23. return (q->len == 0);
  24. }
  25.  
  26.  
  27. int dequeue_front(const struct dequeue *q) {
  28. assert(q);
  29. return q->front;
  30. }
  31.  
  32.  
  33. int dequeue_back(const struct dequeue *q) {
  34. assert(q);
  35. return q->back;
  36. }
  37.  
  38. int dequeue_remove_front(struct dequeue *q) {
  39. assert(q);
  40. ++q->front;
  41.  
  42. if (
  43. }
  44.  
  45.  
  46. int dequeue_remove_back(struct dequeue *q) {
  47. return 0;
  48. }
  49.  
  50.  
  51. // resize_up(q) consumes a dequeue q and puts the elements in q in the center of the array. This function should only be called after a realloc has been called on the array to modify its size
  52. // effects: modifies q->queue and q->front
  53. void resize_up(struct dequeue *q) {
  54. assert(q);
  55. int start = (q->maxlen / 3);
  56.  
  57. for (int i = 0; i < q->len; ++i) {
  58. q->queue[start + i] = q->queue[q->front + i];
  59. }
  60.  
  61. q->front = start;
  62. q->back = start + (len - 1);
  63. }
  64.  
  65. void dequeue_add_front(int item, struct dequeue *q) {
  66. assert(q);
  67. --q->front;
  68. q->queue[q->front] = item;
  69. ++q->len;
  70.  
  71. if (q->front == 0) {
  72. q->maxlen = (q->len * 3); //triple current length
  73. q->queue = realloc(q->queue, q->maxlen * sizeof(int));
  74. resize_up(q);
  75. }
  76. }
  77.  
  78.  
  79. void dequeue_add_back(int item, struct dequeue *q){
  80. ++q->back;
  81. q->queue[q->back] = item;
  82. ++q->len;
  83.  
  84. if (q->back == (q->maxlen - 1)) {
  85. q->maxlen = (q->len * 3); //triple current length
  86. q->queue = realloc(q->queue, q->maxlen * sizeof(int));
  87. resize_up(q);
  88. }
  89. }
  90.  
  91.  
  92. void dequeue_destroy(struct dequeue *q) {
  93.  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement