链栈的压栈和出栈
2017-10-19 01:27
127 查看
#include<iostream>
using namespace std;
typedef float datatype;
struct node //节点类型定义
{
datatype data;
struct node *next;
};
class linkstack //栈结构定义
{
public:
linkstack(){top=NULL;} //构造函数,初始化一个空链栈
~linkstack(); //析构函数,释放链栈中各结点的储存空间
void push(datatype x); //入栈操作,将元素x入栈
datatype pop(); //出栈操作,将栈顶元素出栈
datatype getpop(); //取栈顶元素(并不删除)
bool IsEmpty(){return (NULL==top)?true:false;} //判空操作,判断链栈是否为空栈,栈空则返回1,栈非空则返回0
private:
struct node *top; //栈顶指针即链栈的头指针
};
linkstack::~linkstack()
{
while(top)
{
node *p=top; //暂存被释放的结点
top = top->next; //top指向被释放结点的下一个结点
delete p;
}
}
void linkstack::push(datatype x)
{
node *p=new node; //申请一个数据域为x的结点
p->data=x;
p->next = top; //将节点插在栈顶
top=p;
}
datatype linkstack::pop()
{
if (IsEmpty()) throw "下溢";
datatype x=top->data; //暂存栈顶元素
node *p=top;
top=top->next; //将栈顶结点摘链
delete p;
return x;
}
datatype linkstack::getpop()
{
if(top!=NULL)
return top->data; //返回栈顶指针top所指结点的数据域
else
cout<<"Stack is Empty !"<<endl;
}
int main()
{
linkstack mystack;
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
for(int i = 0;i < 10;i++)
{
mystack.push(i);
cout<<i<<endl;
}
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
for(int i=0;i<10;i++){
cout <<"The top of the stack is :" << mystack.getpop() << endl;
mystack.pop();
}
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
system("pause");
return 0;
}
运行结果:
using namespace std;
typedef float datatype;
struct node //节点类型定义
{
datatype data;
struct node *next;
};
class linkstack //栈结构定义
{
public:
linkstack(){top=NULL;} //构造函数,初始化一个空链栈
~linkstack(); //析构函数,释放链栈中各结点的储存空间
void push(datatype x); //入栈操作,将元素x入栈
datatype pop(); //出栈操作,将栈顶元素出栈
datatype getpop(); //取栈顶元素(并不删除)
bool IsEmpty(){return (NULL==top)?true:false;} //判空操作,判断链栈是否为空栈,栈空则返回1,栈非空则返回0
private:
struct node *top; //栈顶指针即链栈的头指针
};
linkstack::~linkstack()
{
while(top)
{
node *p=top; //暂存被释放的结点
top = top->next; //top指向被释放结点的下一个结点
delete p;
}
}
void linkstack::push(datatype x)
{
node *p=new node; //申请一个数据域为x的结点
p->data=x;
p->next = top; //将节点插在栈顶
top=p;
}
datatype linkstack::pop()
{
if (IsEmpty()) throw "下溢";
datatype x=top->data; //暂存栈顶元素
node *p=top;
top=top->next; //将栈顶结点摘链
delete p;
return x;
}
datatype linkstack::getpop()
{
if(top!=NULL)
return top->data; //返回栈顶指针top所指结点的数据域
else
cout<<"Stack is Empty !"<<endl;
}
int main()
{
linkstack mystack;
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
for(int i = 0;i < 10;i++)
{
mystack.push(i);
cout<<i<<endl;
}
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
for(int i=0;i<10;i++){
cout <<"The top of the stack is :" << mystack.getpop() << endl;
mystack.pop();
}
cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;
system("pause");
return 0;
}
运行结果:
相关文章推荐
- 链栈的基本操作(初始化,压栈,出栈)
- 链栈的输入和删除(压栈和出栈)
- 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
- 链栈的定义、初始化、出栈、入栈等操作
- 学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
- 链栈初始化、进栈、出栈、判空、遍历、求长、求顶、清栈、毁栈
- 04栈的压栈、出栈、遍历
- 栈的,压栈,出栈,遍历,清空算法代码演示
- 数据结构必须掌握 栈---压栈和出栈
- OpenGL中矩阵堆栈为什么要进行多次的压栈和出栈操作?
- [数据结构]c语言实现链栈的入栈,出栈,清空,销毁等操作
- 数据结构学习笔记(5)——栈的创建,遍历,压栈,出栈,清空
- 链栈的置空入栈,出栈,和返回栈顶元素操作
- 线性存储----链式栈的创建、压栈、出栈、清空、空栈判断
- 函数在实现过程内存中的压栈和出栈
- 汇编的压栈(PSHM)和出栈(POPM)
- 链栈的初始化 入栈 出栈 打印栈中的元素等基础内容
- 判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)
- 顺序栈的压栈和出栈
- 函数在实现过程内存中的压栈和出栈