建立一個棧,入棧再出棧。
#include<iostream>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -2#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0using namespace std;typedef int SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;typedef int Status;Status InitStack(SqStack&S){S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base) exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status Push(SqStack &S,SElemType e) { /* 插入元素e為新的棧頂元素 */ if(S.top-S.base>=S.stacksize) /* 棧滿,追加儲存空間 */ { S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); /* 儲存分配失敗 */ S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *(S.top)++=e; return OK; } Status Pop(SqStack &S,SElemType &e) { /* 若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;否則返回ERROR */ if(S.top==S.base) return ERROR; e=*--S.top; return OK; } Status StackEmpty(SqStack S) { /* 若棧S為空白棧,則返回TRUE,否則返回FALSE */ if(S.top==S.base) return TRUE; else return FALSE; }int main(){SqStack S;SElemType a,e;InitStack(S);cout<<"input some integer(ctrl+z to end):\n";while(cin>>a){Push(S,a);}cout<<"入棧,再出棧後:"<<endl;while(!StackEmpty(S)){Pop(S,e);cout<<e<<" ";}}