/*
***功能:
进栈出栈的操作
***栈概念:
[1]先进后出
[2]只能从栈顶压入或弹出元素
[3]进栈时栈顶先保存元素,再把栈顶+1;入栈时栈顶先-1,之后的栈顶值弹出
*/
#include<stdio.h>
#define STACKSIZE 3
/*******************************************************************************
***功能:
入栈
***参数:
栈数组 要进的元素 保存栈顶top的地址&top
***思想:
元素进栈,先获得原来的栈顶top值,再让s[top]=元素;
再top++;
最后把变了的top值保存到原来的栈顶处
*******************************************************************************/
int push(int s[],int x,int *ptop)
{
int top;
top=*ptop+1;
if(top==STACKSIZE) //栈满了
{
printf("overflow\n");
return 0;
}
else
{
s[top]=x;
*ptop=top;
return 1;
}
}
/*******************************************************************************
***功能:
出栈
***参数:
栈数组 要出去的元素 保存栈顶top的地址&top
***思想:
元素出栈,先获得原来的栈顶top值,再top-1就可以获取栈顶元素s[top-1];
最后把变了的top值保存到原来的栈顶处
*******************************************************************************/
int pop(int s[],int *py,int *ptop)
{
int top;
top=*ptop;
if(top==-1) //栈空了
{
printf("stack empty\n");
return 0;
}
else //没空,刚来已经获得栈顶的值top了,因为新元素进栈之后top才会+1的
{ //所以呢top-1保存的是新元素的值;之后再把改变的top值保存到栈顶中
*py=s[top];
--top;
*ptop=top;
return 1;
}
}
int main()
{
static int s[STACKSIZE];
int top=-1,y;
int i;
for(i=0;i<STACKSIZE;i++)
{
push(s,i,&top); //先进,位于栈顶;i是进去的元素;0 1 2
printf("i[%d]=%d ",i,s[i]);
}
printf("\n");
for(i=0;i<STACKSIZE;i++)//后进先出;y是出去的元素; 2 1 0
{
pop(s,&y,&top);
printf("o[%d]=%d ",i,y);
}
printf("\n");
return 0;
}
我的栈
最新推荐文章于 2021-10-04 09:52:33 发布