您的位置:首页 > 理论基础 > 数据结构算法

数据结构 链栈

2018-03-26 23:53 204 查看
做一个豁达而努力的自己。
链栈的存储结构: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: