数据结构 链栈
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;
}
链栈的存储结构: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;
}
相关文章推荐
- 数据结构 C语言 双向链栈 迷宫问题
- 链栈的数据结构以及链栈的实现
- 【数据结构】链栈的基本操作
- 数据结构学习心得——顺序栈和链栈
- 【数据结构】之链栈的java实现
- 数据结构_链栈
- 《数据结构》链栈
- Java数据结构-线性表之栈(顺序栈和链栈)
- 数据结构--链栈
- C语言实现数据结构中的链栈
- 数据结构系列-链栈的基本操作
- 数据结构 - 链栈的基本操作(C语言)
- Java数据结构-线性表之栈(顺序栈和链栈)
- 张小五学算法与数据结构第六天:链栈
- 简单数据结构----链栈的C++实现
- 数据结构 链栈的基本功能实现
- 数据结构第三次上机 第三章之链栈
- 【数据结构】迷宫问题求解(链栈,DFS)
- 数据结构_链栈的建立与相关操作_C语言源代码
- 数据结构学习笔记:顺序栈与链栈