本文主要是介绍压栈出栈遍历栈实例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>typedef struct Node//定义一个链表结构体
{int data;struct Node* pNext;
}NODE,*PNODE;typedef struct Stack//定义一个栈结构体
{PNODE pTop;PNODE pBottom;
}STACK,*PSTACK;void initStack(PSTACK);
void pushStack(PSTACK,int);
void travelStack(PSTACK);
bool popStack(PSTACK,int*);
void clear(PSTACK ps);
int main()
{int val;STACK S;//定义一个S变量,该变量有两个参数。一个pTop,一个pBotton initStack(&S);//初始化栈pushStack(&S,1);//压栈pushStack(&S,2);pushStack(&S,3);pushStack(&S,4);pushStack(&S,5);travelStack(&S);//遍历输出if(popStack(&S,&val))//判断是否出栈成功{printf("出栈成功,出栈元素是%d\n",val);}else{printf("出栈失败\n");}printf("出栈后遍历输出结果\n");travelStack(&S);//遍历输出clear(&S);printf("再次遍历下面为空白,说明清空成功!\n");travelStack(&S);//遍历输出return 0;
}void initStack(PSTACK ps)//初始化栈,让栈里面的两个元素指向一个节点。
{ps->pTop=(PNODE)malloc(sizeof(NODE));if(NULL==ps->pTop){printf("动态内存分配失败\n");exit(-1);}else{ps->pBottom=ps->pTop;ps->pTop->pNext=NULL;//等价于:ps->pBottom->pNext=NULL;也就是说下一次插入的空间是空的。也就是栈顶元素下一个是空的}
}void pushStack(PSTACK ps,int val)//压栈函数
{PNODE pNew=(PNODE)malloc(sizeof(NODE));pNew->data=val;pNew->pNext=ps->pTop;//每次都把元素压到栈顶ps->pTop=pNew;
}void travelStack(PSTACK ps)//遍历栈
{PNODE p=ps->pTop;while(p!=ps->pBottom){printf("%d ",p->data);p=p->pNext;}printf("\n");return ;
}bool empty(PSTACK ps)//判断栈是否为空
{if(ps->pTop==ps->pBottom)return true;elsereturn false;
}//把ps所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中
//如果出栈失败,返回false,否则,返回true
bool popStack(PSTACK ps,int* pVal)
{if(empty(ps)){return false;}else{PNODE r=ps->pTop;*pVal=r->data;ps->pTop=r->pNext;free(r);r=NULL;return true;}
}//最后把栈清空。
void clear(PSTACK ps)
{if(empty(ps)){return ;}else{PNODE p=ps->pTop;PNODE q=NULL;while(p!=ps->pBottom){q=p->pNext;free(p);p=q;}ps->pTop=ps->pBottom;}}
这篇关于压栈出栈遍历栈实例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!