目录
链栈是运算受限的单链表,只在链表头部操作
typedef struct StackNode{
SElemType data;
struct StackNode *next;
}StackNode, *LinkStack;
LinkStack s;
- 链表的头部就是栈顶
- 不需要头结点
- 不存在栈满的情况
- 空栈相当于头指针指向空
- 插入删除仅在栈顶进行
链栈的初始化
void InitStack(LinkStack &s){
s = NULL; //构造空栈,栈顶指针置为空
return OK;
}
链栈判空
Status StackEmpty(LinkStack s){
if(s == NULL) return TRUE;
else return FALSE;
}
取栈顶元素
SElemType GetTop(LinkStack s){
if(s != NULL)
return s->data;
}
链栈的入栈
Status Push(LinkStack &s, SElemType e){
p = (LinkStack)malloc(sizeof(StackNode));
p->data = e; //新结点数据域为e
p->next = s; //新结点插入栈顶
s = p; //修改栈顶指针
return OK;
}
链栈的出栈
Status Pop(LinkStack &s,SElemType e){
if(s == NULL) return ERROR;
e = s->data;
p = s;
s = s->next;
free(p);
return OK;
}