栈的链式存储结构及的实现

栈的链式存储结构

链表的头指针指向空,那么链栈的空就是top=NULL
建立一个链栈的基本代码:

typedef struct Node
{
    int data;
    struct Node *next;
}stackNode,*Linkstackptr;
typedef struct Linkstack
{
    Linkstackptr top;
    int count;
}Linkstack;

链栈和链表类似,链栈的操作也和单链表相同。
进栈操作:把新插入的值赋给栈顶的结点,把之前的栈顶结点的更新。

void push(Linkstack *s,int e)
{
    Linkstackptr p=(Linkstackptr)malloc(sizeof(stackNode));
    p->data=e;//把e赋值给p
    p->next=s->top;//把当前的栈顶元素赋值给新节点
    s->top=p;//将新节点p赋值给栈顶指针。
    s->count++;//栈顶位置+
}

出栈操作:因为栈的先进后出原则,先将栈顶的元素赋给下一个结点,然后再将栈顶出栈,栈顶更新。

void pop(Linkstack *s,sElemtype *e)
{
    Linkstackptr p;
    *e=s->top->data;
    p=s->top;//把栈顶结点赋值给p
    s->top=s->top->next;//栈顶指针移动到下一位,指向后一结点。
    free(p);//释放节点p
    s->count--;
}

栈的链式结构不存在栈满的情况,可以一直申请空间一直进栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值