#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int status; typedef int elemtype; typedef struct node{ elemtype *base; elemtype *top; int size; }sqstack; status initstack(sqstack &s){//初始化栈 s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype)); if(!s.base) exit(OVERFLOW); s.top=s.base; s.size=LIST_INIT_SIZE; return OK; } status get_top(sqstack s,elemtype &e){//获得栈顶元素 if(s.top==s.base) return ERROR; e=*(s.top-1); return OK; } status push(sqstack &s,elemtype e){//向栈中输入元素 if(s.top-s.base>=s.size){ s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype)); if(!s.base) exit(OVERFLOW); s.top=s.base+s.size; s.size+=LISTINCREMENT; } *s.top++=e; return OK; } status pop(sqstack &s,elemtype &e){//删除栈顶元素 if(s.top==s.base) return ERROR; e=*--s.top; return OK; } status empty(sqstack &s){//判断栈是否为空 if(s.base==s.top) return TRUE; else return FALSE; } status clearstack(sqstack &s){//将栈清空 s.top=s.base; return OK; /* elemtype e; while(!empty(s)){ pop(s,e); }*/ } void get_lenght(sqstack s,int &len){//获得栈的长度 len=s.top-s.base; } void destroy(sqstack &s){//销毁栈 free(s.base); s.base=s.top=NULL; s.size=0; } int main(){ sqstack s; initstack(s); for(int i=2;i<=5;i++){ push(s,i); } elemtype e; int len; get_lenght(s,len);//获得栈的长度 destroy(s);//销毁栈 printf("%d ",len); clearstack(s);//清空栈 while(!empty(s)){ get_top(s,e); printf("%d ",e);//从栈顶依次输出栈 pop(s,e); } return 0; }