Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. #include <stddef.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. #define STACK_OVERFLOW -100
  6. #define STACK_UNDERFLOW -101
  7. #define OUT_OF_MEMORY -102
  8.  
  9. typedef int T;
  10. typedef struct Node_tag {
  11. T value;
  12. struct Node_tag *next;
  13. } Node_t;
  14.  
  15. void push(Node_t **head, T value) {
  16. Node_t *tmp = malloc(sizeof(Node_t));
  17. if (tmp == NULL) {
  18. exit(STACK_OVERFLOW);
  19. }
  20. tmp->next = *head;
  21. tmp->value = value;
  22. *head = tmp;
  23. }
  24.  
  25. Node_t* pop1(Node_t **head) {
  26. Node_t *out;
  27. if ((*head) == NULL) {
  28. exit(STACK_UNDERFLOW);
  29. }
  30. out = *head;
  31. *head = (*head)->next;
  32. return out;
  33. }
  34.  
  35. T pop2(Node_t **head) {
  36. Node_t *out;
  37. T value;
  38. if (*head == NULL) {
  39. exit(STACK_UNDERFLOW);
  40. }
  41. out = *head;
  42. *head = (*head)->next;
  43. value = out->value;
  44. free(out);
  45. return value;
  46. }
  47.  
  48. T peek(const Node_t* head) {
  49. if (head == NULL) {
  50. exit(STACK_UNDERFLOW);
  51. }
  52. return head->value;
  53. }
  54.  
  55. void printStack(const Node_t* head) {
  56. printf("stack >");
  57. while (head) {
  58. printf("%d ", head->value);
  59. head = head->next;
  60. }
  61. }
  62.  
  63.  
  64. size_t getSize(const Node_t *head) {
  65. size_t size = 0;
  66. while (head) {
  67. size++;
  68. head = head->next;
  69. }
  70. return size;
  71. }
  72.  
  73.  
  74. void main() {
  75. int i;
  76. Node_t *head = NULL;
  77. for (i = 0; i < 300; i++) {
  78. push(&head, i);
  79. }
  80. printf("size = %d\n", getSize(head));
  81. while (head) {
  82. printf("%d ", peek(head));
  83. printf("%d ", pop2(&head));
  84. }
  85. _getch();
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement