做一个豁达而努力的自己。
链栈的存储结构:
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;
}
代码:
#include <iostream>
using 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 <<endl;
else
cout << "弹栈失败" << endl;
if(StackEmpty(S))
cout << "栈为空" << endl;
else
cout << "栈不为空" <<endl;
cout << "销毁链栈" << endl;
DestroyStack(S);
if(StackEmpty(S))
cout << "栈为空" << endl;
else
cout << "栈不为空" <<endl;
return 0;
}