栈的链式存储结构

发布时间 2023-06-02 01:43:56作者: 刘倩_网安2211

栈的链式存储结构

标签(空格分隔): DS 栈 链式存储


1.链栈的结构代码

//栈节点
typedef struct StackNode
{
    int data;
    struct StackNode* next;
}StackNode,* LinkStackPtr;

//top节点,相当于头节点
typedef struct LinkStack
{
    LinkStackPtr top;//top指针,指向栈顶节点,即第一个节点
    int count;//栈长
}* LinkStack;//相当于头指针,指向top节点

2.进栈操作

思路:
1.为要进栈的元素e申请StackNode型新空间,并赋值
2.插入用头插法
3.栈长加一
Status Push(LinkStack s, int e)
{
    //新节点
    LinkStackPtr p=(LinkStackPtr)malloc(sizeof(StackNode));
    p->data=e;
    //头插法插入
    p->next=s->top;
    s->top=p;
    
    s->count++;

3,出栈操作

思路:
1.判断是否空栈,若是空栈则出错
2.声明一个指针p来指向栈顶节点,用指针e返回栈顶节点的值
3.top节点指向栈顶节点下一个节点,释放掉原栈顶节点
4.栈长减一
Status Pop(LinkStack s, int *e)
{
    if(s->top==NULL)//或者if(StackEmpty(*s))
        return ERROR;
    
    LinkStackPtr p;
    p=s->top;
    *e=p->data;
    
    s->top=p->next;//或者s->top=s->top->next;
    free(p);
    s->count--;
    return OK;
}