標籤:class 資料結構 ++ base style define 初始化 str 插入
#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");}
c語言實現基本的資料結構(三) 棧