代码支持实现初始化、栈空、栈满、取栈顶、进栈、出栈。
代码分为2部分,一个函数部分,一个主函数。
函数部分#include主函数#include #define maxsize 100 typedef struct { char data[maxsize];//栈 int top;//栈顶指针 }sqstack; void init(sqstack *&s)//初始化栈s { s=(sqstack *)malloc(sizeof(sqstack)); s->top=-1;//栈顶指针最初为-1 } void destroy(sqstack *&s)//销毁栈 { free(s); } bool stackempty(sqstack *s)//判断栈是否为空 { return (s->top==-1);//为空,返回1 } bool push(sqstack *&s,char e)//入栈操作 { if(s->top==maxsize-1)//判断栈是否溢出 return false;//溢出,报错 s->top++;//没溢出,栈顶指针指向上一个 s->data[s->top]=e;//将元素入栈至栈顶位置 return true; } bool pop(sqstack *&s,char &e)//出栈操作 { if(s->top==-1)//判断栈是否为空0 return false;//为空,报错 e=s->data[s->top];//元素e存储栈顶位置元素 s->top--;//栈顶指向下一个 return true; } bool gettop(sqstack *s,char &e)//取向栈顶元素 { if(s->top==-1)//判断栈是否为空0 return false;//为空,报错 else e=s->data[s->top];//将元素e存储栈顶元素 return true; }
#include#include #define maxsize 100 typedef struct { char data[maxsize]; int top; }sqstack; extern void init(sqstack *&s); extern void destroy(sqstack *&s); extern bool stackempty(sqstack *s); extern bool push(sqstack *&s,char e); extern bool pop(sqstack *&s,char &e); extern bool gettop(sqstack *s,char &e); void main() { char e; sqstack *s; printf("栈s的基本运算如下:n"); printf("(1)初始化栈sn"); init(s); printf("(2)栈为%sn",(stackempty(s)?"空":"非空")); printf("(3)依次进栈元素a,b,c,d,en"); push(s,'a');push(s,'b');push(s,'c');push(s,'d');push(s,'e'); printf("(4)栈为%sn",(stackempty(s)?"空":"非空")); printf("(5)出栈序列:"); while(!stackempty(s)) { pop(s,e); printf("%c",e); } printf("n"); printf("(6)栈为%sn",(stackempty(s)?"空":"非空")); printf("(7)释放栈n"); destroy(s); }
输出
有的时候,真的不得不承认,c语言和c++的差距,一些打着c语言的书,里面却是一些只有在c++里面才行得通的语法。



