链栈

链栈

采用链表作为储存结构实现的栈称为链栈

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算法思想

  1. 利用栈的特性 先进后出,后入先出的特性,使用尾插法入栈

  2. 头指针即为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算法思想

  1. 判断栈是否为空,判断条件为头指针为空

  2. 为了方便操作,创建一个p结点,将首元结点(也就是栈顶)赋值于p

  3. 让top指针指向p的后继结点

  4. 释放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;
}
 

 

posted @ 2022-10-04 15:59  骆宾王  阅读(90)  评论(0)    收藏  举报