| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:树型链表
只看楼主 加入收藏
天一
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2005-8-1
收藏
 问题点数:0 回复次数:5 
树型链表
你们谁能帮我用JAVA做一个树型的链表啊
搜索更多相关主题的帖子: 链表 
2005-08-10 12:49
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
天一, 要不要 doublelinkedList, 如果要的话,我有现成的,可以给你。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-08-10 17:52
天一
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2005-8-1
收藏
得分:0 
谢谢你,我特别需要

2005-08-15 10:40
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
你可以拿它直接用

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-08-15 18:00
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
本来是要上传文件的,不过没成功,现在改为贴代码了,这个class 已经写得很经典了,你可以直接拿来用
代码如下:
import java.util.Enumeration;

class MyAccessEmptyContainerException extends Exception
{
  public MyAccessEmptyContainerException(){}
  public MyAccessEmptyContainerException(String errorMsg)
  {
    System.out.println(errorMsg);
  }
}
public class DLList
{
  class DLNode
  {
    private Object element;
    private DLNode prev, next;
    public DLNode(Object o)
    {
      element = o;
      prev = next = null;
    }
    public DLNode(Object o, DLNode n, DLNode p)
    {
      element = o;
      next = n;
      prev = p;
    }
    public Object getElement(){return element;}
    public DLNode getPrev(){ return prev;}
    public DLNode getNext(){ return next;}
    public void setElement(Object o){element = o;}
    public void setPrev(DLNode p){ prev = p;}
    public void setNext(DLNode n){ next = n;}
    public final synchronized void remove()
    {
      if(this != endNode)
      {
        next.setPrev(prev);
        prev.setNext(next);
        next = null;
        prev = null;
        elementCount--;
      }
    }
  }
  public final int size(){return elementCount;}

  public final synchronized void makeEmpty()
  {
    endNode.setNext(endNode);
    endNode.setPrev(endNode);
    elementCount = 0;
  }

  public final boolean isEmpty(){ return size()<= 0;}

  public synchronized Object clone()
  {
    DLList d = new DLList();
    for(Enumeration e = elements(); e.hasMoreElements(); )
      d.addElement(e.nextElement());
    return d;
  }

  public final synchronized Enumeration elements()
  {
    return new Enumeration()
    {
      public boolean hasMoreElements()
      {
        return current != endNode;
      }
      public synchronized Object nextElement()
      {
        Object returnValue = current.getElement();
        current = current.getNext();
        return returnValue;
      }
      protected DLNode current = endNode.getNext();
    };
  }

  public final synchronized boolean contains(final Object o)
  {
    return indexOf(o) >= 0;
  }

  public final synchronized int indexOf(final Object o)
  {
    if(!isEmpty())
    {
      DLNode n = endNode.getNext();
      for(int i = 0; (n!=endNode); i++, n = n.getNext())
      {
        if(n.getElement().equals(o))
          return i;
      }
    }
    return -1;
  }

  public final synchronized Object elementAt(final int index)
  {
    return nodeAt(index).getElement();
  }

  public final synchronized Object firstElement() throws MyAccessEmptyContainerException
  {
    if(isEmpty())
      throw new MyAccessEmptyContainerException();
    return endNode.getNext().getElement();
  }

  public final synchronized Object lastElement() throws MyAccessEmptyContainerException
  {
    if(isEmpty())
      throw new MyAccessEmptyContainerException();
    return endNode.getPrev().getElement();
  }

  public synchronized void setElementAt(final Object o, final int index)
  {
    nodeAt(index).setElement(o);
  }

  public final synchronized void removeElementAt(final int index)
  {
    nodeAt(index).remove();
  }

  public synchronized void insertElementAt(final Object o, final int index)
  {
    checkIndex(index);
    if(isEmpty() && (index == 0))
      addElement(o);
    else
    {
      DLNode current = nodeAt(index);
      DLNode n = new DLNode(o, current, current.getPrev());
      current.getPrev().setNext(n);
      current.setPrev(n);
      elementCount++;
    }
  }

  public synchronized void addElement(final Object o)
  {
    DLNode n = new DLNode(o);
    DLNode prev = endNode.getPrev();
    if(size() == 0)
    {
      n.setNext(endNode);
      n.setPrev(endNode);
      endNode.setPrev(n);
      endNode.setNext(n);
    }
    else
    {
      prev.setNext(n);
      n.setPrev(prev);
      n.setNext(endNode);
      endNode.setPrev(n);
    }
    elementCount++;
  }

  public final synchronized boolean removeElement(final Object o)
  {
    int index = indexOf(o);
    if(index < 0)
      return false;
    nodeAt(index).remove();
    return true;
  }

  public final synchronized void removeAllElements()
  {
    if(!isEmpty())
      makeEmpty();
  }

  public final Object head() throws MyAccessEmptyContainerException
  {
    if(isEmpty())
      throw new MyAccessEmptyContainerException();
    return endNode.getNext().getElement();
  }

  public final synchronized DLList tail() throws MyAccessEmptyContainerException
  {
    if(isEmpty())
      throw new MyAccessEmptyContainerException();
    DLList d = (DLList)clone();
    d.removeElementAt(0);
    return d;
  }

  public final synchronized String toString()
  {
    StringBuffer sb = new StringBuffer();
    Enumeration e = elements();
    sb.append("[");
    while(e.hasMoreElements())
    {
      sb.append(e.nextElement().toString());
      if(e.hasMoreElements())
        sb.append(",");
    }
    sb.append("]");
    return sb.toString();
  }

  private final synchronized void checkIndex(final int index)
  {
    if(index >= size())
      throw new IndexOutOfBoundsException
         ("DLList " + index + " >= " + size());
   if(index < 0 )
     throw new IndexOutOfBoundsException
         ("DLList " + index + " < 0");
  }

  private final synchronized DLNode nodeAt(final int index)
  {
    checkIndex(index);
    DLNode current = endNode.getNext();
    if(index >= size()/2)
    {
      current = endNode.getPrev();
      for(int i = size() - 1; i>index; i--)
        current = current.getPrev();
    }
    else
    {
      for(int i = 0; i<index; i++)
        current = current.getNext();
    }
    return current;
  }

  public DLNode dlnodeAtPosition(int p)
  {
    return nodeAt(p);
  }

  private final DLNode endNode = new DLNode(null);
  {
    makeEmpty();
  }
  private DLNode node;
  private int elementCount = 0;
  public DLList() {
  }
}

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-08-15 18:42
天一
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2005-8-1
收藏
得分:0 
谢谢你啊 ?

2005-08-16 12:40
快速回复:树型链表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049769 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved