链栈
采用链表作为储存结构实现的栈称为链栈
1.初始化链栈
1.1链栈的结构
typedef struct LinkStackNode {
ElemType data;
struct LinkStackNode *next;
}LinkStackNode,* LinkStack;
1.2定义一个空栈
void InitStack(LinkStack& S)
{
S = (LinkStack)malloc(sizeof(LinkStackNode));
S->next = NULL;
}
2.入栈
2.1算法思想
-
利用栈的特性 先进后出,后入先出的特性,使用尾插法入栈
-
头指针即为top指针
2.2算法设计
void Push1(LinkStack &top,ElemType e)
{
LinkStack temp = (LinkStack)malloc(sizeof(LinkStackNode));
temp->data = e;
temp->next = top->next;
top->next = temp;
}
3.出栈
3.1算法思想
-
判断栈是否为空,判断条件为头指针为空
-
为了方便操作,创建一个p结点,将首元结点(也就是栈顶)赋值于p
-
让top指针指向p的后继结点
-
释放p
3.2算法设计
bool Pop(LinkStack& top)
{
if (top->next = NULL)
{
return false;
}
LinkStack p = top->next;
top->next = p->next;
free(p);
return true;
}
标签:LinkStack,temp,LinkStackNode,top,next,链栈 From: https://www.cnblogs.com/wlb429/p/16753915.html