栈
栈的链式存储结构及其基本运算的实现
采用链式储存结构的栈称为栈链
栈空的条件:s->next==null;
栈满条件:只有内存溢出才会出现栈满,所以理论上不存在
元素e进栈操作:新建一个结点存放e,将节点P插入到头结点之后
出栈操作:取出首节点data并将其删除
在栈链上对应栈的基本算法
typedef struct linknode
{
ElemType data;
struct linknode* next;
}LinkStNode;
void InitStack(LinkStNode*& s)
{
s = (LinkStNode*)malloc(sizeof(LinkStNode));
s->next = NULL;
} //初始化栈(创建栈链的头结点,并将NEXT置为NULL)
void DestroyStack(LinkStNode*& s)
{
LinkStNode* pre = s, * p = s->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
} //销毁栈
bool StackEmpty(LinkStNode* s)
{
return(s->next == NULL);
} //判断栈是否为空
void Push(LinkStNode*& s, ElemType e)
{
LinkStNode* p;
p = (LinkStNode*)malloc(sizeof(LinkStNode));
p->data = e;
p->next = s->next;
s->next = p;
} //进栈
bool Pop(LinkStNode*& s, ElemType e)
{
LinkStNode* p;
if (s->next = NULL)
return false;
p = s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
} //出栈