java 链表--实现自定义队列

                                                   链表— 实现自定义队列

        学习链表之前,斌哥带着我们回顾了一下之前学过的集合,也顺便把遗忘的知识复习一下吧。

        列表在数据结构中分别表现为:数组和向量,链表,堆栈,队列。而相类似于队列等系统都有提供接口(java.util.List)来让我们继承,可直接使用接口下定义的方法,一个队列的方法无非也就是增,删,改,查。

        虽然系统提供了那么多方法,但是数组,List等都是有序的存储,在获取某个特定位置的元素,或者删除或插入一个元素时,尤其当存储的数据较多时,其耗费的时间比较长,所以此时就需要用到链表。

        链表是一种物理存储单元上非连续,非顺序的存储结构,因为它数据元素的逻辑顺序是通过链表中的指针链次序实现的,所以相对于线性表顺序结构,链表比较方便插入和删除操作。链表有单链表和双链表之分,相较于单链表,双链表可以实现对某个元素的前一个元素进行操作,免去了又要从头开始查找的麻烦。

双链表实现自定义队列 部分代码示例:

数据的查找:

public  Node get(int index){
     if(index<0||index>size-1){//减一是因为从0开始
	//抛出异常
	throw new RuntimeException("下标越界了");
      }else {//从第一个结点开始找 并计数 直到 计数计到所给定的位置
			
	Node node=first;
	int count=0;
			
	while(count!=index){//如果计数不等于给定位置 就找下一个
		 node=node.next;
		  count++;
			}
		return node;
		}
	}

数据的插入:

public boolean insert(String element,int index){
        if(index<0||index>=size){
	throw new RuntimeException("下标越界了");
	}else {
		//创建一个新结点
		Node NewNode=new Node(element);
		//得到当前索引位置的结点
		Node node=this.get(index);
		if(index==0){//如果在第一个位置插入
			first=NewNode;
		}else {
		   //得到前一个结点
		     Node Pnode=node.pre;
		   //设置新插入的结点与当前节点的前一个结点的引用关系
		    Pnode.next=NewNode;
		       NewNode.pre=Pnode;
				
		}
		//设置新插入的结点与当前结点的引用关系
		NewNode.next=node;
		node.pre=NewNode;
		size++;
			
		}
                     return true;
	}
		

数据的删除:

public void delete(int index){
       if(index<0||index>=size){
	throw new RuntimeException("下标越界了");
       }else {
	//得到当前索引位置的结点
	Node node=this.get(index);
	//得到前一个结点
	Node Pnode=node.pre;
	//得到后一个结点
	Node Nnode=node.next;
	if(Pnode==null){//此结点为头结点
	   first=Nnode;
	}else if(Nnode==null){//此结点为末结点
		node.next=null;
	    }else{//此结点为中间结点	
                     Pnode.next=Nnode;
	               Nnode.pre=Pnode;
		}
	}
	//删除元素之后 相应的链表长度要减一
	size--;
}

猜你喜欢

转载自lxl-yes777.iteye.com/blog/1579545
今日推荐