当前位置: 代码迷 >> J2SE >> 兑现链式存储机制
  详细解决方案

兑现链式存储机制

热度:208   发布时间:2016-04-24 12:10:00.0
实现链式存储机制
Java code
public class LinkedStack<T> {  private static class Node<U> {      U item;      Node<U> next;      Node() { item=null; next=null; }      Node(U item,Node<U> next) {          this.item=item;          this.next=next;      }      boolean end() { return item==null&&next==null; }  }  private Node<T> top=new Node<T>();  //末端哨兵  public void push(T item) {      top=new Node<T>(item,top);  }  public T pop() {      T result=top.item;      if(!top.end())          top=top.next;      return result;  }  public static void main(String args[]) {      LinkedStack<String> lss=new LinkedStack<String>();      for(String s: "Phasers on stun!".split(" "))          lss.push(s);      String s;      while((s=lss.pop())!=null)          System.out.println(s);  }}/*Output:stun!onPhasers*/

这个例子中使用了一个末端哨兵来判断堆栈何时为空。这个末端哨兵是在构造LinkedStack时创建的。然后,每 调用一次push()方法,就会创建一个Node<T>对象,并将其链接到前一个Node<T>对象。当你调用pop()方法时,总是返回top.item,然后丢弃当前top所指的Node<T>,并将top转移到下一个Node<T>,除非你已经碰到了末端 哨兵,这时候就不再移动top了。
-------------------------------------------
请解释这里的push(),pop()。
整段代码执行原理,谢谢。

------解决方案--------------------
你写的代码相信你最清楚了
------解决方案--------------------
定义:s1=Phasers,s2=on,s3=stun;
push的方法处理结果也就是lss,类似于map集合键值对形式,
一步步这样嵌套的,最后的对象是lss也就是k3

k1={s1,[item=null,next=null]}
k2={s2,k1}
k3={s3,k2}={
s3,{s2,{s1,[item=null,next=null]}}
}
lss=k3;

那么pop是逐步取值的,当然向上面述说的那样,最后的值s3是最后放进去的,也是第一个
从pop这个方法中取出的,同时方法体内还叛断最后的top是否没空,空则执行结束
这个类似于栈(stack)的原理吧,先进后出,后进先出的道理吧
pop:result=(k3.item=s3)
top = (k3.next=k2)
最先输出的就是k3,然后k2,最后k1吧、
------解决方案--------------------
执行原理?你自己不懂?那你怎么写出来的呢
------解决方案--------------------
每次push都是把Node top放到顶部,并且建立top与next的联系;每次pop都是从顶部取Node,pop过程中利用top的next属性
------解决方案--------------------
就是典型的堆栈,先进后出。
以item==null及next==null的节点为最底端的节点。
top是最顶端的指针。
  相关解决方案