数据结构-双向链表实现栈
来源:互联网 发布:淘宝卖家发错快递 编辑:程序博客网 时间:2024/06/10 12:36
隔日更新:
第二天起来发现,双链表实现栈似乎没啥意义,你想啊,入栈,出栈都是一个方向的,要这双向有嘛用,不如直接单链表,push时新节点记住当前top元素,pop时直接指向下一个,比搞双向的要简单很多。(废话这么多,也不知道有木有能理解我在说啥。。。)
算了,直接重写一个单链表栈吧,初学者们就别看这个案例了,免得思路被我带偏了。。。。
------------------------------------------------------------------------------------------------
与数组实现栈对比一下,发现:
优点:不需要象数组那样考虑数组是否满了
不好的地方:push pop处理时,要处理栈中元素的上下引用关系(较麻烦)尤其是pop栈中最后一个元素时,要谨慎
public class Node{public int data ;public Node up ;//指向上一个元素(主要是pop时要用,毕竟要记住上一个元素是谁嘛~)public Node down ;//指向下一个元素public Node ( int data ){this.data = data ;}}
/* * 使用链表实现栈 * * 栈的特点:先进后出 * * * 2017年11月29日21:23:09 */public class LinkStack{private Node top ;//入栈public void push ( int data ){Node newNode = new Node ( data ) ;//如果top为空,说明栈也为空if( isEmpty() ){top = newNode ;}else{//将新元素的down指向原栈顶元素newNode.down = top ;//原栈顶元素的up指向新元素top.up = newNode ;//新元素成为栈顶元素top = newNode ;}}//出栈public Node pop (){if ( isEmpty () ){System.out.println ( "null----" );return null ;}Node temp = top ;//临时存放要出栈的元素top = top.down ;//将要出栈元素的下一个元素变为栈顶if ( isEmpty () == false )//防止本次操作pop出的元素是栈中的最后一个元素,不加会抛空指针异常top.up = null ; return temp ;}//判断是否为空public boolean isEmpty (){return top == null ;}//遍历public void display (){Node current = top ; //遍历用的索引if ( isEmpty () ){System.out.println ( "栈是空的,无法遍历" );return ;}while ( current != null ){System.out.print ( current.data + " " );current = current.down ;}System.out.println ();}}
阅读全文
1 0
- 数据结构-双向链表实现栈
- 【数据结构】双向链表实现
- 数据结构之双向链表的实现
- 使用java实现双向链表数据结构
- 数据结构练习--双向链表的实现
- 【数据结构】双向循环链表实现
- 数据结构之双向链表实现
- 数据结构双向链表的实现
- java 实现双向链表(数据结构)
- 数据结构-双向链表的实现
- 数据结构--java实现双向链表
- 数据结构(C实现)------- 双向链表
- [数据结构] 双向链表的实现
- C实现通用数据结构--双向链表
- 数据结构双向链表C++实现
- 数据结构通用双向循环链表实现
- 数据结构--双向链表实现(java)
- 动手实现 数据结构 之 “双向链表”
- MFC学习笔记12 创建动态DLL库
- HDU 2007 平方和与立方和
- 机器学习——梯度下降算法
- Non-square Equation CodeForces
- java基础之多线程
- 数据结构-双向链表实现栈
- ubuntu16.04安装TensorFlow的正确步骤
- Struts1.x 总结
- 创建多线程的几种方法
- jvm加载class文件的原理机制分析
- 导入安卓工程项目报错的笔记
- 使用Comparable接口类型表示泛型
- 字节流demo
- (转)SegWit 与 Lightning Network