我是靠谱客的博主 危机鸭子,最近开发中收集的这篇文章主要介绍数据结构必须掌握 栈---压栈和出栈,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天刚学到压栈出栈,就把这个具体过程都实现了一遍,废话不多说,代码如下:

#include"stdafx.h"
#include<iostream>
using namespace std;
typedef class list
{
public:
int data;
list*next;
};
typedef struct stack
{
list*ptop;
list*pbottom;
}STACK,*PSTACK;//PSTACK等价于struct STACK*
list*head=NULL;
void initstack(PSTACK ps)//创建一个空栈
{
ps->ptop=new list;
if(NULL==ps->ptop)
{
cout<<"动分配内存失败..."<<endl;
exit(-1);
}
else
{
ps->pbottom=ps->ptop;
ps->ptop->next=NULL;
}
}
void push(PSTACK ps,int val)
{
list*p1=new list;//创建一个新节点
p1->data=val;//数据域存数据
p1->next=ps->ptop;//这里p1的下一个结点一定要指向ptop,因为压栈每次都压到栈顶,所以下一个结点就是当前ptop
ps->ptop=p1;//把新结点地址放到top里面
}
void traverse(PSTACK ps)//遍历栈,即找一个指针,首先等于top,因为top指向栈的第一个结点
{
list*p=ps->ptop;
while(p!=ps->pbottom)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
bool empty(PSTACK ps)
{
if(ps->ptop==ps->pbottom)
return true;
else
return false;
}
bool pop(PSTACK ps,int *val)
{
if(empty(ps))
return false;
else
{
list*t;
t=ps->ptop;
*val=t->data;//t->data是一个值,需要用*val来接收,val是一个指针,里面是地址
delete t;
t=NULL;
return true;
}
}
void clear(PSTACK ps)
{
if(empty(ps))
return;
else
{
list*p,*q;
p=ps->ptop;
q=NULL;
while(p!=ps->pbottom)
{
q=p->next;
delete p;
p=q;
}
ps->ptop=ps->pbottom;
}
}
int main()
{
int val;
STACK s;//STACK等价于struct stack
initstack(&s);//需要传进去一个地址来修改
cout<<"i是依次为0,1,2,3,4,5,6,7,8进栈"<<endl;
cout<<"当前栈里面的数据顺序为:"<<endl;
for(int i=0;i<9;i++)
push(&s,i);
traverse(&s);
if(pop(&s,&val))
{
cout<<"出栈成功,出栈元素为:"<<val<<" ";
}
else
{
cout<<"出栈失败...."<<endl;
}
clear(&s);
system("pause");
return 0;
}

最后

以上就是危机鸭子为你收集整理的数据结构必须掌握 栈---压栈和出栈的全部内容,希望文章能够帮你解决数据结构必须掌握 栈---压栈和出栈所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部