数据结构-双向链表实现栈

来源:互联网 发布:淘宝卖家发错快递 编辑:程序博客网 时间: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 ();}}



原创粉丝点击