做一个豁达而努力的自己。
链栈的存储结构:
typedef struct StackNode{ SElemType data; StackNode *next;}StackNode, *SLinkStack;
链栈的初始化:
void InitStack(SLinkList &S){ S = NULL;}
判断是否为空:
Status StackEmpty(SLinkList S){ if(S == NULL) return true; return false;}
压栈:
Status Push(SLinkList &S, SElemType e){ SLinkList p; p = new StackNode; if(!p) return OVERFLOW; cin >> p->data; p->next = S; S = p; return OK;}
弹栈:
Status Pop(SLinkList &S, SElemType &e){ if(S == NULL) return ERROR; e = S->data; SLinkList p; p = S; S = S->next; delete p; return OK;}
取栈顶元素:
Status GetTop(SLinkList S, SElemType &e){ if(S == NULL) return ERROR; e = S->data; return OK;}
代码:
#includeusing namespace std;//链栈的存储结构typedef struct StackNode{ int data; StackNode *next;}StackNode, *SLinkList;//链栈的初始化void InitStack(SLinkList &S){ S = NULL;}//判断链表是否为空bool StackEmpty(SLinkList S){ if(S == NULL) return true; return false;}//压栈bool Push(SLinkList &S, int e){ SLinkList p; p = new StackNode; if(!p) return false; p->data = e; p->next = S; S = p; return true;}//弹栈bool Pop(SLinkList &S, int &e){ SLinkList p; if(S == NULL) return false; e = S->data; p = S; S = S->next; delete p; return true;}//取栈顶元素bool GetTop(SLinkList S, int &e){ if(S == NULL) return false; e = S->data; return true;}//链栈的销毁void DestroyStack(SLinkList &S){ SLinkList p, q; p = S; while(p) { q = p; delete q; p = p->next; } S = NULL;}int main(){ SLinkList S; InitStack(S); int n; int e; cout << "输入元素个数:"; cin >> n; while(n--) { cin >> e; if(Push(S, e)) ; else cout << "弹栈失败" << endl; } if(GetTop(S, e)) cout << "栈顶元素是:" << e << endl; else cout << "查找栈顶元素失败" << endl; if(Pop(S, e)) cout << "弹栈成功,弹出的元素是:" << e <