数据结构——栈的链表实现

栈的链表实现与数组实现原理差不多,只要熟悉链表的操作就能快速写出来。不过链表实现不需要考虑栈满的问题,因为栈的大小完全由你压栈决定。当然malloc申请的内存空间是有限的,超过了这个空间也不行。下面我讲一些创建空栈,压栈,出栈操作。

1、创建空栈

首先考虑,栈顶指针压栈的时候到底是往链表下端增加,还是往上增加。若往下增长,那么在出栈的时候,就无法实现,因为栈顶指针指向的是尾结点,单向链表是不能访问上一个结点的,除非是双向链表。为方便压栈、出栈的操作,所以创建带有头结点的空栈。

/*
**    创建带有头结点的空栈
*/ 
Stack Create_Stack()
{
    Stack S = (Stack) malloc(sizeof(struct SNode));
    S->next = NULL;
    return S;
}

2、压栈

压栈操作,实际上是将新结点插入到栈顶下方。

void Push(Stack S, int X)
{
    Stack T = (Stack)malloc(sizeof(struct SNode));
    T->Data = X;
    T->next = S->next;            /* 栈顶头结点S想上移动 */ 
    S->next = T; 

3、出栈

出栈操作,实际上是删除栈顶下方结点。

/*
**    出栈
*/
int Pop(Stack S)
{
    Stack t &

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值