用Linklist来实现队列(queue)

用链表Linklist 来实现队列(queue)队列可以用数组(ArrayList)或者链表(Linklist)来实现,队列(queue)是(先进先出(FIFO))擅长删除,插入数据。[  建议在思考下面节点的指向时用画图会更清楚直观 ]

 

Linklist来实现队列(queue)先创建一个MyLinkList 类  代码如下:

public class MyLinkList<E>{

}    //(E)是泛型 在还没确定往队列里面存放什么数据的时候,用泛型,这样等到对象创建是可以确定任意的类型

 创建节点个数为0的来链表 代码如下:

 

 

public class MyLinkList<E>{
Node head = null;
Node last  =null;
int num; //定义num来计数 链表中的节点数
} 

 在创建节点时候用到Node 节点类,所以我们需要自己写一个内部使用的节点类 NodeMyLinkList类中使用;

public class MyLinkList<E>{
Node head = null;
Node last  =null;
int num;
private class Node{
   E e;                       //定义一个泛型的数据e
   Node next;                   //定义节点next
       public Node(E e){				 //Node 带参数e的构造函数
  this.e = e;               
       }
}
}

创建2个类(MyLinkList)和(Node)后 可以写方法pushE e)将数据e 压入队列中

在用链表实现队列的时候记住链表是节点不是动态数组(Arraylist)连续的位置,链表需要节点指向下一个位置的节点 (例如节点n 是头节点headn.next就是头节点下的第二个节点) 代码如下:

 

public void push(E e){
Node n = new Node(e);      //’先创建一个节点n, (e)尾节点n中的数据;
if(head ==null){			 //先进行判断链表的头节点是否为空,如果为空,那么n							  作为头节点,同时也是尾节点。
head = n;
last = n;
}else{
last.next = n; 			 //如果不是为空,则将节点n  放到节点last后面(last.next),
  同时n 也作为尾节点。 
last = n;			
}
    num++;					//节点数num自增。
}

 

public E get(){
		return head == null?null:head.e;  //采用三目运算符,进行判断头节点如果为空就输出null 否则输出head.e
	}

 写好压入数据入队列的方法,再写一个将数据弹出来的方法poll() ,弹出数据和压入数据差不多,就是节点的指向不同。节点弹出又返回值,需要用泛型E

 

public E poll(){
if(head==null){				//先判断链表是否为空,如果为空则弹出空数据,返回								(return)一个null值。
return  null;
}
Node n = head;			//创捷一个新的节点n 指向head 
head = n.next;				//头节点(head)和n 节点同时指向第一个节点,出队列     					  需要弹出第一个节点,就是节点n,所以                                                         头节点需要指向下一个节点(head = n.next)
n.next = null;				//然后头节点n节点的下一个指向就为null,可以弹出。
num - -;					//弹出数据,节点自减
return n.e;				//返回节点n 上面的数据 e
}

    

   创建一个size()方法来返回节点数num

 

public int size(){
    return num;			//创建一个size()方法来返回节点数num
	}

创建一个可以弹出队列第一个数据的方法get()    代码如下:

 

 

public E get(){
		return head == null?null:head.e;  //采用三目运算符(?)进行判断,如果头节点为空就返回null,否则返回head.e
	}

 返回方法除了用三目运算 也可以用流程控制语句(if   else)进行判断。

 

 

上面的方法时不能查看队列里面的数据,但是可以运行,测试过没问题,数据可以放进去,也可以弹出来,是FIFO类型。

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自771235695.iteye.com/blog/2363418