栈的简洁版(十分易懂十分明白)只要能明白三个函数你就能明白栈了

我看了好多博主的关于栈的论坛,我觉得有些功能太杂乱了,这里我将主要的讲述如何初试化栈,如何入栈,如何出栈的三大函数
现在我先介绍一下栈的基本原理
栈的简洁版(十分易懂十分明白)只要能明白三个函数你就能明白栈了## 标题我们可以想象栈结构就是一个弹夹,弹夹它需要被制造出来这就需要初始化函数****弹夹肯定要上子弹的这需要我们的入栈函数,弹夹里的子弹肯定也会被打出去的这就需要出栈函数

#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; 
}

所以,但我们想到栈时,我们要立刻想到栈的***后入先出***这个特点

上一篇:详解C# Tuple VS ValueTuple(元组类 VS 值元组)


下一篇:popup的使用(一)