我的栈

来源:互联网 发布:java对接微信公众平台 编辑:程序博客网 时间:2024/04/30 13:05

/****功能:进栈出栈的操作***栈概念:[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  2printf("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;}


0 0
原创粉丝点击