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

本文介绍了栈的链表实现,包括创建空栈、压栈和出栈操作。通过链表实现栈,避免了栈满的问题,但需要注意链表的方向以方便压栈和出栈。代码示例展示了如何创建带有头结点的空栈、如何插入新结点进行压栈,以及如何删除栈顶元素进行出栈。

栈的链表实现与数组实现原理差不多,只要熟悉链表的操作就能快速写出来。不过链表实现不需要考虑栈满的问题,因为栈的大小完全由你压栈决定。当然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(Sta

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值