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

数据结构——15 栈链表描述

2016-08-18 17:19 225 查看

栈——链表描述

栈——进栈、出栈、打印(链表描述)

链表描述中,栈里的元素连接关系是,从上而下栈顶元素向栈底元素指针连接。

//关于数据结构中栈的操作,用一个类,实现栈的建立、入栈、出栈、删除栈的操作。

#include <iostream>
using namespace std;
struct node          //定义一个结构体,它是栈里的元素
{
int x;
node* next;
};

class stack
{
public:
stack():top(NULL),size(0){}     //构造函数初始化栈顶指针,栈顶指向空指针,栈里元素的大小为0
~stack();                       //析构函数删除堆栈
int pop();                      //出栈
void push(int n);               //进栈
private:
node *top;                      //node节点是栈的元素
int size;                       //栈里元素的个数
};

stack::~stack()
{
node *p=top;
while(p!=NULL)
{
p=top->next;                  //用top的next赋值p,使p指向新的栈顶元素
delete [] top;                //删除以前的栈顶元素top,释放所指向的结点
top=p;                        //再用top指向栈顶元素,直到循环结束,栈内元素全部删除
}
}

void stack::push(int n)           //进栈(压栈)操作,增加一个元素放在栈顶
{
node* temp=new node;          //定义一个临时指针
temp->x=n;
temp->next=top;               //使新结点的next指针指向栈顶(数据)
top=temp;                     //用新增加指针更新栈顶指针
size++;                       //栈里元素个数加1
}

int stack::pop()                  //出栈操作,返回栈顶元素值,并删除第一个栈顶元素
{
node* temp;                   //定义一个临时node指针
int back;                     //返回值
if(size)                      //用size判断是否栈里还有元素
{
temp=top;                 //使temp指向栈顶结点
back=top->x;
top=top->next;            //用top自身更新指针,使top指向下一个元素,即出栈以后的栈顶结点
delete []temp;            //通过临时指针删除栈顶
size--;
return back;
}
else
{
cout<<"栈已经为空!"<<endl;
exit(0);
}
}

int main()
{
stack s;
for(int i=1;i<=10;i++)
s.push(i);
cout<<"The element of stack are: ";
for(i=1;i<=20;i++)
cout<<s.pop()<<"  ";
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  进栈 出栈