`
张小芳
  • 浏览: 34391 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

数据结构之链表

阅读更多

链表是一种物理存储单元上非连续、非顺序的存储结构。

链表有一系列的结点组成,结点可以在运行是动态生成。

每一个结点包括两个部分:存储数据的数据域和存储下一个结点的指针域。

 

下面是结点的一个类,有设置和得到结点中数据的方法,设置和得到下一个结点的方法。

设置结点的数据setObject(Object obj)

得到结点的数据getObject()

设置下一个结点setNext(linkNode next)

得到下一个结点getNext()

public class linkNode {
	Object obj;//结点中中的数据
	linkNode next;//对下一个结点的引用
	public linkNode(Object obj){
		this.obj=obj;
	}
	public Object getObject(){
		return obj;
	}
	public void setObj(Object obj){
		this.obj=obj;
	}
	public  void setNext(linkNode next){
		this.next=next;
	}
	public linkNode getNext(){
		return next;
	}
}

 

 结点的类设置好了后,还要添加结点,创建链表。

分链表为空和不为空两种情况:如果不为空,就将刚刚创建的结点作为根结点,并且该结点是尾结点,否则,将刚刚创建的结点作为尾结点。

 

linkNode root=null;//根结点
		linkNode end=root;//尾结点
		public void add(Object obj){
		if(root==null){
			root=new linkNode(obj);
			end=root;
		}else{
			linkNode node=new linkNode(obj);
			end.setNext(node);
			end=node;
		}
		}

 

 得到链表的大小。

如果链表为空,长度就为0,否则,见以下代码:

 

                        count++;
			linkNode node=root.getNext();
			while(node!=null){
				count++;
				node=node.getNext();

 

 得到结点中存储的数据:

如果不在范围之内,抛出异常

 

if(index>=size()||index<0){
				throw new RuntimeException("给定的值超出范围:index:"+index);
			}

 

 在范围之内,找到结点后调用getObject()方法,得到数据。

 

                                 linkNode node=root.getNext();
				while(node!=null){
					n++;
					if(index==n) return node.getObject();
					node=node.getNext();
				}

 

 插入结点

如果是在根结点前插入结点

 

                                node.setNext(root);
				root=node;
 

 

如果是在尾结点后插入结点

 

end.setNext(node);

 

在根结点之后和尾结点前插入结点

                         node1=root;
			for(int i=0;i<n-1;i++){
				node1=node1.getNext();
			}
			node.setNext(node1.getNext());
			node1.setNext(node);

  删除结点

删除根结点

 

                               node=root.getNext();
				root=node;

 

 删除尾结点

 

                                node=root;
				for(int i=0;i<t-1;i++){
				node=node.getNext();	
				}
				end=node;
				node1=node.getNext();
				node1=null;	

 

 删除根结点之后尾结点之前的结点

 

                        node=root;
			for(int i=0;i<n-1;i++){
				node=node.getNext();
			}
			node1=node.getNext();
			node.setNext(node1.getNext());
			node1=null;	

 

 查询索引值为n的结点

 

                        linkNode node;
			Object o = null;
			node=root;
			for(int i=0;i<size();i++ ){
				if(i==n) o=node.getObject();
				node=node.getNext();
			}
			return o;

 

 修改结点n的数据为o

 

                        linkNode node;
			if(n==0) root.setObj(o);
			else{		
				node=root;
				for(int i=0;i<n;i++ ){
				node=node.getNext();
			}
			node.setObj(o);
		}

 结果如下:

 


   

 

 

 

 

  • 大小: 59.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics