编辑代码

//链栈的定义
typedef struct linknode
{
    ElemType data;                              //数据域
    struct linknode * next;                     //指针域
}LiStack;                                       //声明链栈结点类型

//初始化栈
void InitStack(LiStack * &lst)
{
    lst = (LiStack *)malloc(sizeof(LiStack));
    lst -> next = NULL;
}

//判断栈是否为空
int StackEmpty(LiStack * lst)
{
    return(lst -> next) == NULL;
}

//进栈
void Push(LiStack * &lst,ElemType x)
{
    LiStack * p;
    p = (LiStack * )malloc(sizeof(LiStack));
    p -> data = x;
    p -> next = lst -> next;                    //插入结点 p 作为头结点
    lst -> next = p;
}

//出栈
int Pop(LiStack * &lst,ElemType &x)
{
    LiStack * p;
    if(lst -> next == NULL)                     //栈空的情况
        return 0;
    p = lst -> next;
    x = p -> data;                              //p 指向头结点
    lst -> next = p -> next;
    free(p);
    return 1;
}

//取栈顶元素的算法
int GetTop(LiStack * &lst,ElemType &x)
{
    LiStack * p;
    if(lst -> next == NULL)                     //栈空的情况
        return 0;
    p = lst -> next;                            //p 指向头结点
    x = p -> data;
    return 1;
}