持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情。
基于链式存储结构实现栈
上篇中,我们为大家设计并完善了栈的变种——双端栈。而在篇章的结尾,则提到了栈的另一种实现方式。从本篇开始,将为大家讲解基于链式存储结构的栈实现。
相比于由顺序表实现的栈,链式存储结构实现的栈要更加灵活,栈的入栈不在受数组长度影响,对空间的利用率更高。而与顺序表栈不同的是,链表栈只需要记录头结点就可以完成入栈和出栈操作。
由于链表头插入的特殊性质,使得头节点的next
属性指向的永远都是最新插入的节点。而这又刚好与栈的出入栈规则——先进后出,后进先出向契合。
public class listStack{
Node head;
public void push();
public int pop();
}
依照惯例,先设计构建链表栈的初始化方法。
public listStack
{
this.head = new Node();
this.head.value = 0;
}
public int length() // 获取当前栈中已入栈元素的数量
{
return this.head.value;
}
初始化链表栈时,创建头节点对象,并且我们利用在链表篇中学到的技巧,将栈中的元素数量放置在头节点中。
接下来再设计链表栈的入栈方法,我们在前面提到:头插入的添加元素方法刚好契合栈的入栈规则,因此push()
方法也将使用头插入的逻辑来实现。
public void push(int value) // 使用头插入实现的入栈方法
{
Node next = new Node(value);
next.addNext(this.head.next);
this.head.addNext(next);
this.head.value++;
}
小结
本篇中我们为大家介绍了栈的另一种实现结构,并为其设计了初始化和入栈方法。
天天学习,加速成长!
希望与各位一起变得越来越强!