利用链式存储结构实现的栈称作链栈(link stack).链栈中的每一个数据元素用一个结点表示,其数据形式与单链表完全相同。链栈从本质上讲就是单链表,无非是限制了插入和删除运算只能在链头进行,所有可以说链栈是限制插入和删除运算只能在链头进行的单链表。由于在链头运算,所以不用像单链表那样附加头结点,更方便运算。
链栈的类型定义如下:
typedef struct node
{
elemtype data;
struct node *next;
}linkstack;
linkstack *top;//栈顶指针,即链头指针
链栈的基本运算实现算法如下:
1.置空栈算法
void setnull(linkstack *top)
{
top=NULL;//只要置top为空即可
}
2.判栈空算法
int empty(linkstack *top)//栈空返回1否则返回0
{
if(top==NULL)
return 1;
else
return 0;
}
3.进栈算法
void push(linkstack *top,elemtype x)//链栈不会发生上溢
{
linkstack *p;
p=(linkstack *)malloc(sizeof(linkstack));//生成新结点并将其地址送p
p->data=x;//填入元素x
p->next=top;//插入栈顶
top=p;//修改栈顶指针值
}
4.出栈算法
elemtype pop(linkstack *top)
{
linkstack *p;
elempty x;
if(top==NULL)
return NULL;//栈为空时无元素弹出
else
{
p=top;//保存栈顶指针于p中
x=top->data;//存栈顶元素于x中
top=top->next;//修改栈顶指针
free(p);//释放弹出元素结点空间
return x;//返回弹出元素的值
}
}
5.读栈顶元素算法
elemtype gettop(linkstack *top)
{
if(top==NULL)
return NULL;
else
return top->data;
}