栈的链式储存结构(以结构体实现)

#include<bits/stdc++.h>

using namespace std; 

struct StackNode //创建链表单元(结点) 

{

 int data; //数据域 

 StackNode *next; //指针域 

};

StackNode* zero() //初始化链栈 

{

 StackNode* top=new StackNode; //为栈开辟空间,使top成为链栈的栈顶单元 

 top->next=NULL; //先指向NULL,防止其成为野指针 

 return top; //返回链栈的头单元 

}

void Push(StackNode* top,int x) //入栈 

{

 StackNode* p=new StackNode; //为普通单元开辟空间 

 p->data=x; //将需要入栈的值存入普通单元的数据域 

 p->next=top->next; //将新节点的下一个指针指向原来栈顶指针的下一个节点

 top->next=p; //将栈顶指针的下一个节点指向新节点,完成入栈操作

}

bool Null_(StackNode* top) //判空 

{

 return (top->next==NULL); //返回top的下一个单元 

}

int pop(StackNode* top) //出栈 

{

 if(Null_(top)) //先进行判空 

 {

  cout<<"栈空"<<endl;

  return -1; 

 }

 int e=top->next->data; //将要出栈的数据返回给e 

 StackNode* p=top->next; //保存要出栈的单元 

 top->next=p->next; //使top指向下下个单元 (出栈单元的下一个单元) 

 delete p; // 释放出栈单元的空间 

 return e; //返回出栈的数据 

}

void traverse(StackNode* top) //遍历栈 

{

 cout<<"当前出栈顺序为:"; //提示 

 StackNode* p=top->next; //top本身没有数据,需从top的下一个单元开始遍历 

 while(p!=NULL) //判空 

 {

  cout<<p->data<<" "; //输出出栈数据 

  p=p->next; //指向下一个元素 

 }

 cout<<endl; //换行使界面更加整洁 

}

int main()

{

 int i,n,a[100];

 StackNode* top=zero(); //c初始化top 

 cout<<"输入入栈数据的个数: "; 

 cin>>n;

 for(i=0;i<n;i++) //入栈 

 {

  cin>>a[i];

  Push(top,a[i]);

 }

 traverse(top); //遍历栈 

 cout<<"输入出栈数据个数: ";

 cin>>n;

 for(i=0;i<n;i++) //出栈 

 {

  cout<<pop(top)<<"出栈"; 

 }

 traverse(top); //遍历栈 

  cout<<"输入入栈数据的个数: "; 

 cin>>n;

 for(i=0;i<n;i++)

 {

  cin>>a[i];

  Push(top,a[i]);

 }

 traverse(top);

 return 0; 

}

如下附上运行结果:

293f9f55f5e24aeab18d89a0f6ba5235.png

 

850f4612d12a4405a08ee4b33f4fcdb7.jpg 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值