链栈的表示


typedef struct StackNodef{

    SElemType data;

    struct StackNode *next;

}StackNode,*LinkStack;

LinkStack S;

Snipaste_2023-08-19_16-25-52
注意:
  • 链表的头指针就是栈顶

  • 不需要头结点

  • 基本不存在栈满的情况

  • 空栈相当于头指针指向空

  • 插入和删除仅在栈顶处执行

链栈的初始化


void InitStack(LinkStack &S){

    //构造一个空栈,栈顶指针置为空

    S=NULL;

    return OK;

}

链栈是否为空


Status StackEmpty(LinkStack S){

    if (S==NULL) return TRUE;

    else return FALSE;

}

链表的入栈


Status Push(LinkStack &S,SElemType e){

    p=new StackNode;	//生成新结点p

    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;

    delete p;

    return OK;

}

取栈顶元素


SElemType GetTop(LinkStack S){

    if(S!=NULL)

        return S->data;

}