資料結構 順序棧 操作集
阿新 • • 發佈:2018-11-01
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #define STACK_INIT_SIZE 10 using namespace std; typedef int ElemType ; struct Stack { ElemType* base; int top; int tail; }; void Init (Stack& sq) { sq.base=(ElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE); sq.top=sq.tail=0; if(sq.base==NULL) { printf("棧初始化失敗\n"); exit(-2); } } bool Is_empty(Stack& sq) { if(sq.tail==sq.top) { return true; } else return false; } int Gettop(Stack& sq) { if(Is_empty(sq)) { printf("順序棧為空\n"); return -1; } else { return sq.base[(sq.top-1)]; } } int Pop (Stack& sq) { if(Is_empty(sq)) { printf("順序棧為空\n"); return -1; } return sq.base[--sq.top]; } bool Push (Stack& sq,ElemType data) { if(sq.top-sq.tail>=STACK_INIT_SIZE) { printf("棧已滿,不能新增元素\n"); return false; } sq.base[sq.top++]=data; return true; } void Traverse (Stack& sq) { for (int i=sq.top-1;i>=sq.tail;i--) { printf("%d%c",sq.base[i],i==sq.tail ? '\n':' '); } } int Sq_len (Stack& sq) { return sq.top-sq.tail; } void Clear(Stack& sq) { sq.top=sq.tail; } void Destory (Stack& sq) { free(sq.base); sq.base=NULL; } int main() { Stack s; Init(s); for (int i=0;i<15;i++) { Push(s,i); printf("棧頂元素為: %d\n",Gettop(s)); } Traverse(s); printf("棧的長度為%d\n",Sq_len(s)); return 0; }