求高手教一下栈怎么应用的。。。。。。
我们离散数学的实验,求一个逻辑表达式的真值表。里面会用到栈,但是我对栈不是很了解,
希望有人教一下,然后举几个例子,说明怎么用的,
说一下关于栈的函数。
急需,谢谢
程序代码:#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);
}
}
/*------------------------------------------------------------------------------*/
这是我以前写的链表栈。希望对你有帮助。
