链栈程序演示

本文介绍了链栈的实现原理,通过栈顶和栈底指针管理链表,重点阐述了链栈的创建、压栈、出栈以及如何判断栈的空与满。在实际编程中,使用结构体指针进行操作,并强调了头结点的重要性,以及避免内存泄露的注意事项。链栈本质上是倒置的链表,其操作主要涉及栈顶指针的移动。

链栈本质就是操作链表。

链栈是怎么实现的呢?

通过栈顶指针top和栈底指针bottom,只要创建一个头结点,然后使得top和bottom都指向这个头结点,那么栈就被创建了,就这么简单,可以说,整个链栈的创建和操作都是通过指针来完成的。在写程序的时候,所有程序不要定义成结构体变量,而是定义成结构体指针。
需要注意的是,头结点是不存放任何数据的,只存放指向首结点的指针,同链表中一样,定义这样一个不存放数据的结点是有必要的。

程序中难免会有同时传递top和bottom的情况,这时就要传递两个参数。可以将他们封装在一个结构体里面,然后定义一个结构体指针指向他,这样只需要传递这个结构体的指针就行了。
栈是通过压栈和出栈的方式存储数据的。其中压栈是前插操作,即压栈的结点指向原来的栈顶结点,然后top指向压栈的结点,更新栈顶指针,这样就可以执行一次压栈。

如果要出栈,那么top就指向下一个结点就行了。因为top永远是指向栈顶的,所以top移动到下一个结点就相当于原来的栈顶结点被删除了。如果要销毁的话,只要循环反复的进行出栈知道栈空就可以了。记住出栈的结点要将他释放掉,不然他会一直存在内存中,造成内存泄露。而要释放掉出栈的结点就要在移动top之前先定义一个指针变量指向该结点,否则移动top之后这个结点就找不到了,因为链表不是连续的,找不到就不能将他释放掉。

从压栈和出栈可以看出,栈的操作其实就是栈顶指针来回不断的移动,这就是栈的本质,链表是不要移动头指针,而栈就是要移动头指针。

此外还需要注意的是:栈底指针是死的,是不动的,他始终都指向没有存放任何有效数据的头结点。

那么我们如何判断栈是空的

博客
v8worker
05-08 2962
05-06 2947
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值