fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. /**************************************
  4. struct Stack * s = newLinkedStack();
  5. s->push(s,5);
  6. s->push(s,6);
  7. printf("%d\n",s->pop(s));
  8. printf("%d\n",s->pop(s));
  9. ***************************************/
  10. struct StackNode
  11. {
  12. int data;
  13. struct StackNode* preNode;
  14. };
  15. typedef struct StackType
  16. {
  17. struct StackNode* top;
  18. void (*push) (struct StackType* self, int data);
  19. int (*pop) (struct StackType* self);
  20. void (*clear) (struct StackType* self);
  21. }Stack;
  22.  
  23. void pushStack(struct StackType* self, int data);
  24. int popStack(struct StackType* self);
  25. struct StackType* newLinkedStack();
  26. struct StackNode* newStackNode();
  27. void clearStack(struct StackType* self);
  28.  
  29. struct StackType* newLinkedStack()
  30. {
  31. struct StackType* stack = (struct StackType*)malloc(sizeof(struct StackType));
  32.  
  33. stack->push = pushStack;
  34. stack->pop = popStack;
  35. stack->clear = clearStack;
  36. stack->top = NULL;
  37.  
  38. return stack;
  39. }
  40. struct StackNode* newStackNode()
  41. {
  42. struct StackNode* stackNode = (struct StackNode*) malloc( sizeof(struct StackNode) );
  43. stackNode->preNode = NULL;
  44. return stackNode;
  45. }
  46. void pushStack(struct StackType* self, int data)
  47. {
  48. struct StackNode* stackNode = newStackNode();
  49. stackNode->data = data;
  50. if(self->top == NULL)
  51. self->top = stackNode;
  52. else
  53. {
  54. stackNode->preNode = self->top;
  55. self->top = stackNode;
  56. }
  57. }
  58. int popStack(struct StackType* self)
  59. {
  60. int retn = self->top->data;
  61. void* temp = self->top;
  62.  
  63. self->top = self->top->preNode;
  64.  
  65. free(temp);
  66. return retn;
  67. }
  68. int isEmptyStack(struct StackType* self)
  69. {
  70. if(self->top == NULL)
  71. {
  72. return 1;
  73. }
  74. else return 0;
  75.  
  76. }
  77. void clearStack(struct StackType* self)
  78. {
  79. while(self->top != NULL)
  80. {
  81. self->pop(self);
  82. }
  83. }
  84. void deleteLinkedStack(struct StackType* s)
  85. {
  86. s->clear(s);
  87. free(s);
  88. }
  89. int main(void)
  90. {
  91. Stack* s = newLinkedStack();
  92. s->push(s,5);
  93. s->push(s,6);
  94. printf("%d\n",s->pop(s));
  95. printf("%d\n",s->pop(s));
  96. }
Runtime error #stdin #stdout 0s 2380KB
stdin
Standard input is empty
stdout
6
5