链栈的表示与实现
//不需要设表头结点,使用top指向栈顶元素 #include<iostream.h> #include<stdlib.h> //exit的原型定义 #define STACK_INIT_SIZE 100 #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int Status; typedef char SElemType; typedef struct SNode { SElemType data; struct SNode *next; }StackNode,*LinkStack; void InitStack(LinkStack &top) { top=NULL; } int StackEmpty(LinkStack top) { return(top==NULL); } Status push(LinkStack &top,SElemType x) { StackNode *p=new StackNode; if(!p) exit(OVERFLOW); p->data=x; p->next=top; top=p; return OK; } Status pop(LinkStack &top,SElemType &e) { StackNode *p=top; if(StackEmpty(top)) return ERROR; top=p->next; e=p->data; delete(p); return OK; } void create_stack(LinkStack &top) { for(char ch='a';ch<='g';ch++) push(top,ch); } void StackTravers(LinkStack top) { StackNode *p=top; while(p) { cout<<p->data<<" "; p=p->next; } cout<<endl; } void MakeEmpty(LinkStack &top) { StackNode *p; while(top!=NULL) { p=top; top=top->next; delete p; } } Status GetTop(LinkStack top,SElemType &e) { if(StackEmpty(top)) return ERROR; e=top->data; return OK; } void main() { LinkStack top; SElemType e; InitStack(top); create_stack(top); StackTravers(top); cout<<"input Element e="; cin>>e; push(top,e); StackTravers(top); if(pop(top,e)) cout<<"pop top element="<<e<<endl; else cout<<"Stack is Empty\n"; if(GetTop(top,e)) cout<<"get top element="<<e<<endl; else cout<<"Stack is Empty\n"; MakeEmpty(top); if(pop(top,e)) cout<<"pop top element="<<e<<endl; else cout<<"Stack is Empty\n"; }