求高手教一下栈怎么应用的。。。。。。
我们离散数学的实验,求一个逻辑表达式的真值表。里面会用到栈,但是我对栈不是很了解,
希望有人教一下,然后举几个例子,说明怎么用的,
说一下关于栈的函数。
急需,谢谢
#include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct node { DataType data; struct node *next; }StackNode,*PStackNode; /*栈的节点类型定义*/ typedef struct{ PStackNode top; }LinkStack,*PLinkStack; /*栈的定义*/ /*------------------------------------------------------------------------------*/ /*初始化空栈*/ PLinkStack Ini_LinkStack(void) { /*初始化空栈,返回链栈指针,null表示初始化失败*/ PLinkStack S; S=(PLinkStack)malloc(sizeof(LinkStack)); if(S) S->top=NULL; return (S); } /*------------------------------------------------------------------------------*/ /*判断栈空*/ int Empty_LinkStack(PLinkStack S) { /* 判断栈是否为空*/ return (S->top==NULL); } /*------------------------------------------------------------------------------*/ /*入栈*/ int Push_LinkStack(PLinkStack S,DataType x) { /*进栈,入口参数:链栈指针,进栈元素,返回值:1成功,0失败*/ PStackNode p; p=(PStackNode)malloc(sizeof(StackNode)); if(!p) { printf("内存溢出!"); return 0; } p->data=x; p->next=S->top; S->top=p; return 1; } /*------------------------------------------------------------------------------*/ /*出栈*/ int Pop_LinkStack(PLinkStack S,DataType *x) { /*出栈,返回值:1表示成功0表示失败,*x保存被删除的元素*/ PStackNode p; if(Empty_LinkStack(S)) { printf("栈空不能出栈\n"); return 0; } *x=S->top->data; p=S->top; S->top=S->top->next; free(p); return 1; } /*------------------------------------------------------------------------------*/ /*取栈顶元素*/ int GetTop_LinkStack(PLinkStack S,DataType *x) { /*得到栈顶元素,入口参数:链栈指针,出栈元素存放空间地址*/ if(Empty_LinkStack(S)) { printf("栈空\n"); return 0; } *x=S->top->data; return 1; } /*------------------------------------------------------------------------------*/ /*销毁栈*/ void Destroy_LinkStack(PLinkStack *LS) { /*销毁栈,入口参数,要销毁的链栈指针地址*/ PStackNode p,q; if(*LS) { p=(*LS)->top; while(p) { q=p; p=p->next; free(q); } free(*LS); } *LS=NULL; return ; } /*------------------------------------------------------------------------------*/ /*显示栈*/ void Display_LinkStack(PLinkStack S) { DataType x; while(S->top) { printf("%d\t",S->top->data); Pop_LinkStack(S,&x); } } /*------------------------------------------------------------------------------*/ 这是我以前写的链表栈。希望对你有帮助。