1.链栈的定义
typedef struct SNode
{
SElemType data;
struct SNode *next;
}SNode,*LinkStack;
2.基本操作的函数原型
1)创建
Status CreatStack(LinkStack &S,int n);
操作结果:创建一个栈长为n的链栈
2)销毁
Status DeatroyStack(LinkStack &S);
操作结果:销毁栈S
3)探空
Status StackEmpty(LinkStack &S);
操作结果:若栈S为空栈,则返回TRUE,否则返回FALSE
4)清空栈
Status ClearStack(LinkStack &S);
操作结果:把S置为空栈
5)求栈长
Status StackLength(LinkStack S);
操作结果:返回S的元素个数
6)获取栈顶元素
Status GetTop(LinkStack S,SElemType &e);
操作结果:若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
7)入栈
Status Push(LinkStack &S,SElemType e);
操作结果:插入元素e为新的栈顶元素
8)出栈
Status Pop(LinkStack &S,SElemType &e);
操作结果:若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
9)输出栈中全部元素
void Print(LinkStack S);
操作结果:输出栈中的全部元素
3.附录
//-----*---*------
//程序名称:链栈的实现
//编译环境:VC++ 6.0
//作者:Bee_darker
//修改日期:2018-10-23
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int SElemType;
//定义链栈
typedef struct SNode
{
SElemType data;
struct SNode *next;
}SNode, *LinkStack;
//创建链栈
Status CreatStack(LinkStack &S,int n)
{
LinkStack p;
int i;
S = (LinkStack)malloc(sizeof(SNode));
S->next = NULL;
for(i = n;i > 0;--i)
{
p=(LinkStack)malloc(sizeof(SNode));
scanf("%d",&p->data);
p->next = S->next;
S->next = p;
}
return OK;
}
//入栈
Status Push(LinkStack &S,SElemType e)
{
LinkStack p;
p = (LinkStack)malloc(sizeof(SNode));
p->data = e;
p->next = S->next;
S->next = p;
return OK;
}
//出栈
Status Pop(LinkStack &S,SElemType &e)
{
LinkStack p = S->next;
e = p->data;
S->next = S->next->next;
return OK;
}
//获取栈顶元素
Status GetTop(LinkStack S,SElemType &e)
{
if(S->next == NULL)
return ERROR;
e = S->next->data;
return e;
}
//求栈长
Status StackLength(LinkStack S)
{
LinkStack p = S->next;
int i;
for(i = 0;p !=NULL;p = p->next,i++)
return i;
}
//探空
Status StackEmpty(LinkStack &S)
{
if(S->next == NULL)
return TRUE;
else
return FALSE;
}
//清空栈
Status ClearStack(LinkStack &S)
{
S->next = NULL;
return OK;
}
//销毁栈
Status DeatroyStack(LinkStack &S)
{
LinkStack p = S,q;
while(p != NULL)
{
q = p->next;
free(p);
p = q;
}
return OK;
}
//输出栈中元素
void Print(LinkStack S)
{
LinkStack p = S->next;
while(p != NULL)
{
printf("%d\t",p->data);
p = p->next;
}
}
int main()
{
LinkStack LS;
int x,y;
CreatStack(LS,3);
Print(LS);
printf("\n");
Push(LS,100);
Print(LS);
printf("\n");
Pop(LS,x);
printf("\n");
Print(LS);
printf("%d\n",x);
GetTop(LS,y);
printf("%d\n",y);
printf("%d\n",StackLength(LS));
return 0;
}
4)操作结果