typedef int ElemType;
typedef struct StackNode{
ElemType data; //当前结点的的数据域
struct StackNode *next; //指向前一个结点的指针
}StackNode,*LinkStack;
链栈的实现是先定义一个结点指针,使其为NULL。这个作为判断是否空栈的标志。
链栈的空栈借助一个空指针,只要栈顶指针指向这个空指针就说明是空栈。
链栈的实现是申请一块空间,将其连在原来栈顶的前面,作为新的栈顶。由此可见链栈可以入栈是不用考虑是否栈满。
由此可见,我们只需要记录链栈的栈顶指针就可以。每次对栈进行操作是只需要传入栈顶指针就可以。
1、链栈的创建
LinkStack InitStack(){
LinkStack s;
S=NULL; //令这个指针为NULL,用来判断是否为空栈
return s;
}
2、链栈的入栈
LinkStack Push(LinkStack s,ElemType e){
//入栈是不用判断栈是否已满,因为链表随时可以申请增加。
//链栈一第一个结点做栈顶,以最后一个结点做栈底。
//所以链栈没有满栈,可以无限入栈
LinkStack p;
p=(LinkStack)malloc(sizeof(StackNode)); //申请一块空间
p->data=e; //赋值
p->next=s; //将这块空间连接到原来栈顶之前
s=p; //栈顶指针向前移一位,指向新连接上的这块空间,作为新的栈顶
return s;
}
3、链栈的出栈
4、取链栈的栈顶元素
ElemType GetTop(LinkStack s){
if(s!=NUll)
return s->data;
}