栈在计算机的世界中是一种重要的数据结构,栈的出现让递归成为可能,同时栈的思想也是解决问题的一种方法,栈最重要的特点就是“先进后出”(first in last out),可以将栈想象成一个木桶,木桶的底部是封住的,顶部才有开口,入栈就是向木桶中存储东西,但是从化木桶中取东西的话始终只能操作当前的最顶部的东西,而且木桶放满之后就不能再存入,这就是栈比较形象的比喻,向栈中存入元素和出栈要判断栈中是否占满和为空的情况,我们设置一个top指针,来显示当前栈中的情况,栈的具体建立过程我们用以下代码实现:
#include <stdio.h> //用数组实现栈
#include <stdlib.h>
#define Max_size 10 // 栈中元素的最大值
int push(int *s,int t,int val );
int pop(int *s,int t,int val);
void Creat_stack();
int main()
{
int a[Max_size+1]={1,2,3,4,5,6,7,8,9,10,11};
int top=-1,*stack;
stack=(int *)malloc(Max_size*sizeof(int));//动态创建栈的内存空间
Creat_stack(stack,top,a);
return 0;
}
void Creat_stack(int *s,int t,int *a)
{
int i;
for(i=0;i<Max_size+1;i++)
{
if(t==Max_size-1){
t=pop(s,t,a[i]); //栈满时将栈顶元素弹出
}
t=push(s,t,a[i]); //栈未满时向栈中压入值
}
}
int push(int *s,int t,int val) //元素入栈
{
s[++t]=val; //栈顶元素先加一再存值
printf("%d已经入栈\n",val);
return t;
}
int pop(int *s,int t,int val) //使元素出栈
{
printf("%d已经出栈\n",s[t--]); //先输出提示栈顶值已经被弹出再减一
return t;
}
需要注意的是传给栈的数组要比Max_size大一些用来体现push函数的作用,栈是一种非常重要的数据结构,栈的出现为递归的实现提供了可能性,递归的过程为解决问题提供了不一样的思路。