#include <stdio.h> #include <tchar.h> #include <stdlib.h> #define StackSize 5 #define IncrementSize 5 // TODO: 在此處引用程序需要的其他頭文件 struct Stack { int *base; int *top; int stacksize; }; //初始化棧 bool Init_Stack(Stack* s){ s->base = (int*)malloc(StackSize*sizeof(int)); if (s->base == NULL) return false; s->top = s->base; s->stacksize = StackSize; return true; } //銷毀棧 bool Destroy_Stack(Stack* s){ free(s->base); s->base = NULL; s->top = NULL; s->stacksize = 0; return true; } //清空棧 bool Clear_Stack(Stack* s){ s->top = s->base; return true; } //插入元素 bool Push(Stack* s, int value){ if (s->top - s->base >= s->stacksize){ s->base = (int*)realloc(s->base, (StackSize + IncrementSize)*sizeof(int)); s->top = s->base + s->stacksize;//重置一下棧頂,感覺也沒多大必要呀 s->stacksize += IncrementSize; } *++s->top = value;//棧頂指向棧頂元素 s->stacksize++; return true; } //彈出元素 int Pop(Stack* s){ if (s->top == s->base) return false; int p = *s->top--; s->stacksize--; return p; } //逆序打印 void Print_Stack(Stack s){ if (s.top == s.base) printf("此棧為空\n"); while (s.top!=s.base){ printf("%d->", Pop(&s)); } printf("\n"); } //正序打印 void Stack_Traverse(Stack s){ if (s.top == s.base) printf("此棧為空\n"); while (s.top != s.base){ printf("%d->", *++s.base); } printf("\n"); }