Advertisement
leo1553

Untitled

Oct 10th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. // GenericList.cpp: Define o ponto de entrada para a aplicação de console.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. typedef struct Item {
  7. Item *ref;
  8. void *val;
  9. } Item;
  10.  
  11. // Stack
  12.  
  13. typedef struct Stack {
  14. Item *last;
  15. int len;
  16. } Stack;
  17.  
  18. Stack* newStack() {
  19. Stack *ptr = (Stack*)malloc(sizeof(Stack));
  20. ptr->last = NULL;
  21. ptr->len = 0;
  22. return ptr;
  23. }
  24.  
  25. //Push pointer to stack
  26. void stackPush(Stack *stack, void *item) {
  27. Item *ptr = (Item*)malloc(sizeof(Item));
  28. ptr->ref = stack->last;
  29. ptr->val = item;
  30. stack->last = ptr;
  31. stack->len++;
  32. }
  33.  
  34. //Push pointer VALUE to stack
  35. void stackPush(Stack *stack, void *item, int typeLen) {
  36. void *val = malloc(typeLen);
  37. memcpy(val, item, typeLen); //Why is it on string.h?
  38. stackPush(stack, val);
  39. }
  40.  
  41. void* stackPop(Stack *stack) {
  42. if(stack->len == 0)
  43. return NULL;
  44.  
  45. Item *item = stack->last;
  46. stack->last = item->ref;
  47. stack->len--;
  48.  
  49. void *ptr = item->val;
  50. free(item);
  51. return ptr;
  52. }
  53.  
  54. // Queue
  55.  
  56. typedef struct Queue {
  57. Item *first;
  58. Item *last;
  59. int len;
  60. } Queue;
  61.  
  62. Queue* newQueue() {
  63. Queue *ptr = (Queue*)malloc(sizeof(Queue));
  64. ptr->first = NULL;
  65. ptr->last = NULL;
  66. ptr->len = 0;
  67. return ptr;
  68. }
  69.  
  70. void enqueue(Queue *queue, void *item) {
  71. Item *ptr = (Item*)malloc(sizeof(Item));
  72.  
  73. ptr->val = item;
  74. ptr->ref = NULL;
  75.  
  76. if(queue->len == 0)
  77. queue->first = ptr;
  78. else
  79. queue->last->ref = ptr;
  80.  
  81. queue->last = ptr;
  82.  
  83. queue->len++;
  84. }
  85.  
  86. void enqueue(Queue *queue, void *item, int typeLen) {
  87. void *val = malloc(typeLen);
  88. memcpy(val, item, typeLen);
  89. enqueue(queue, val);
  90. }
  91.  
  92. void* dequeue(Queue *queue) {
  93. if(queue->len == 0)
  94. return NULL;
  95.  
  96. Item *item = queue->first;
  97.  
  98. queue->first = item->ref;
  99. queue->len--;
  100.  
  101. void *ptr = item->val;
  102. free(item);
  103. return ptr;
  104. }
  105.  
  106. int main() {
  107. int x;
  108.  
  109. Stack *stack = newStack();
  110. x = 10;
  111. stackPush(stack, &x, sizeof(int));
  112. x = 12;
  113. stackPush(stack, &x, sizeof(int));
  114. x = 14;
  115. stackPush(stack, &x, sizeof(int));
  116. x = 16;
  117. stackPush(stack, &x, sizeof(int));
  118.  
  119. printf("Stack test: %d %d %d %d\n", *(int*)stackPop(stack), *(int*)stackPop(stack), *(int*)stackPop(stack), *(int*)stackPop(stack));
  120.  
  121. Queue *queue = newQueue();
  122. x = 99;
  123. enqueue(queue, &x, sizeof(int));
  124. x = 88;
  125. enqueue(queue, &x, sizeof(int));
  126. x = 77;
  127. enqueue(queue, &x, sizeof(int));
  128. x = 66;
  129. enqueue(queue, &x, sizeof(int));
  130.  
  131. printf("Queue test: %d %d %d %d\n", *(int*)dequeue(queue), *(int*)dequeue(queue), *(int*)dequeue(queue), *(int*)dequeue(queue));
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement