标签:information cout 十分 top Stake 弹夹 明白 易懂 include
我看了好多博主的关于栈的论坛,我觉得有些功能太杂乱了,这里我将主要的讲述如何初试化栈,如何入栈,如何出栈的三大函数
现在我先介绍一下栈的基本原理
## 标题我们可以想象栈结构就是一个弹夹,弹夹它需要被制造出来这就需要初始化函数****弹夹肯定要上子弹的这需要我们的入栈函数,弹夹里的子弹肯定也会被打出去的这就需要出栈函数
#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;
}
所以,但我们想到栈时,我们要立刻想到栈的***后入先出***这个特点
标签:information,cout,十分,top,Stake,弹夹,明白,易懂,include 来源: https://blog.csdn.net/m0_52242395/article/details/113076714
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。