我看了好多博主的关于栈的论坛,我觉得有些功能太杂乱了,这里我将主要的讲述如何初试化栈,如何入栈,如何出栈的三大函数
现在我先介绍一下栈的基本原理
## 标题我们可以想象栈结构就是一个弹夹,弹夹它需要被制造出来这就需要初始化函数****弹夹肯定要上子弹的这需要我们的入栈函数,弹夹里的子弹肯定也会被打出去的这就需要出栈函数
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#define SIZE 40
using namespace std;
typedef struct Data
{
char info;
}DATA;
typedef struct stake
{
int top;//栈顶
int base;//栈底
DATA stakes[SIZE];
}Stake;
Stake *InitStake( )//初试化栈
{
Stake *p;
if((p=(Stake *)malloc(sizeof(Stake)))==NULL)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
p->base=0;
p->top=0;
return p;
}
void InStake(Stake *p,char information)//入栈 我们要考虑的是栈是否溢出
{
if(p->top==SIZE)
{
cout<<"栈已满"<<endl;
}
else
{
p->stakes[p->top++].info=information;//这里的p->top++的意思希望各位看官能够明白
//这段代码的意思是先执行p->data[p->top]=data 然后top在加1
}
}
void OutStake(Stake *p)//出栈 我们要考虑的是栈是否下溢 (即是否为空)
{
if(p->top==0)//我们也可写成p->top==p->base 因为p->base=0在整个程序中
{
cout<<"栈为空"<<endl;
}
else
{
cout<<p->stakes[--p->top].info<<endl;//这里的--p->top的意思希望各位看官能够明白
//这段代码的意思是先执行p->top减1,然后输出p->data[p->top]
}
}
int main()
{
Stake *p;
char information;
p=InitStake();
cout<<"请输入十个字符"<<endl;
for(int i=0;i<10;i++)
{
cin>>information;
InStake(p,information);
}
cout<<"输出出栈的顺序"<<endl;
for(int i=0;i<10;i++)
OutStake(p);
cout<<"这就是栈典型的后进先出(先进后出)" <<endl;
return 0;
}
所以,但我们想到栈时,我们要立刻想到栈的***后入先出***这个特点