`
孙瑞鸿
  • 浏览: 17156 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

链表实现队列

阅读更多
用链表实现队列
1 建立链表节点类
public LinkNode{
		public Object obj;
		public LinkNode child;
		public LinkNode parent;
	}
添加get,set方法即可
2 建立链表类
  实现添加节点,删除节点,更新节点,输出链表长度,输出链表等方法
实例化链表类,将以上方法添加到链表
使用双向链表,设置头节点front和尾节点last
添加方法:
/**
	 * 插入新节点
	 * @param obj:要插入的新节点
	 */
	public void add(Object obj) {
                  //实例化节点,将要插入的节点内容放入节点
		LinkNode node=new LinkNode(obj);
		if(front==null){
			front=node;
			last=front;	
		}else{
			last.setChild(node);
			node.setParent(last);
			last=node;
		}
		
	}
	
	/**
	 * 删除指定位置的节点
	 * @param index:指定节点
	 */
	public void deleteLink(int index) {
		if(index>this.getLength()||index<0){
			throw new java.lang.RuntimeException("下标越界"+index+"size:"+this.getLength());
		}else{
			LinkNode node=this.getLinkNode(index);
			LinkNode fNode=(LinkNode) node.getParent();
			LinkNode cNode=(LinkNode) node.getChild();
			if(fNode==null){
				fNode=cNode;
			}else if(cNode==null){
				fNode.setChild(cNode);
				}else{
					fNode.setChild(cNode);
					cNode.setParent(fNode);
				}
		}
	}
	
	/**
	 * 修改对象节点
	 * @param index:修改位置
	 * @param obj:修改后的数据
	 */
	public void updateLink(int index, Object obj) {
		if(this.getLength()<index||index<0){
			throw new java.lang.RuntimeException("下标越界"+index+"size:"+this.getLength());
		}else{
			
			LinkNode node=this.getLinkNode(index);
			node.setObj(obj);
		}
		
	}
	
	/**
	 * 取得链表的长度
	 * @return:链表的长度
	 */
	public int getLength() {
		int count=0;
		if(front==null){
			return count;
		}
		LinkNode node=(LinkNode) front.getChild();
		if(node!=null){
			count++;
			node=(LinkNode) front.getChild();
		}
		return count+1;
	}
	/**
	 * 输出链表
	 * @param root:头结点
	 */
	public void printLink(LinkNode root){
		if(root!=null){
			Object data=root.obj;
			System.out.println("数据:"+data);
			root=(LinkNode) root.getChild();
			printLink(root);
		}
		
	}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics