数据结构之队列(Java实现)

1.知识储备
数据结构之队列(Java实现)_第1张图片
2.程序设计
数据结构之队列(Java实现)_第2张图片
3.代码实现

package Queue;

import java.util.Iterator;

public class Queue<T> implements Iterable<T> {
 
	//记录首节点
	private Node head;
	//记录最后一个节点
	private Node last;
	//记录节点个数
	private int N;
	
	//构造方法,初始化队列
	public Queue() {
		// TODO Auto-generated constructor stub
		this.head=new Node(null, null);
		this.last=null;
		this.N=0;
	}
	private class Node{
		T item;
		Node next;
		//节点类构造方法
		public Node(T item,Node next) {
			// TODO Auto-generated constructor stub
			this.item=item;
			this.next=next;
		}
	}
	
	//判断当前队列是否为空
	public boolean isEmpty(){
		return N==0;
	}
	
	//获取当前队列的元素个数
	public int  size() {
		return N;
	}
	
	//出队操作
	public T OutQueue(){
		//1.首先判断队列是否为空
		//2.如果为空则之间返回null
		//3.如果不为空,则返回首节点后第一个元素,并将首节点指向第一个元素的下一个元素即可
		if(isEmpty()){
			return null;
		}
		else{
			Node curr=head.next;
			head.next=curr.next;
			//元素个数-1
			N--;
			//出队列其实是在删除元素,如果元素都删除完了,则需要重置last为Null
			if(isEmpty()){
				last=null;
			}
			return curr.item;
		}
	}
	
	//入队操作
	public void InQueue(T item){
		//1.判断当前尾节点last是否为null,如果为null则说明这是个空队列,则需要让尾节点last存储数据,在让头节点指向尾节点
		if(last==null){
			last=new Node(item,null);
			head.next=last;
		}
		else{
			//如果当前尾节点last不为null,则说明队列中又元素,此时只需要把新节点链接到尾节点后即可
			//创建一个节点用来存储当前尾节点
			Node oldlast=last;
			last=new Node(item,null);
			oldlast.next=last;
		}
		//元素个数+1
		N++;
	}
/*实现遍历操作
 * (non-Javadoc)
 * @see java.lang.Iterable#iterator()
 */
	@Override
	public Iterator<T> iterator() {
		// TODO Auto-generated method stub
		return new QIterator();
	}
	private class QIterator implements Iterator{
        private Node n; //获取当前节点
        public QIterator() {
			// TODO Auto-generated constructor stub
        	this.n=head;    //初始化当前节点
		}
		@Override
		public boolean hasNext() {
			// TODO Auto-generated method stub
			return n.next!=null;
		}

		@Override
		public Object next() {
			// TODO Auto-generated method stub
			n=n.next;
			return n.item;
		}
		
	}
}

4.测试类:

package Queue;

public class QueueTest {
   public static void main(String[] args) {
	 //创建一个队列
	   Queue<String> que1=new Queue<String>();
	   //入队列操作
	   que1.InQueue("a");
	   que1.InQueue("b");
	   que1.InQueue("c");
	   que1.InQueue("d");
	   que1.InQueue("e");
	   que1.InQueue("f");
	   que1.InQueue("g");
	   //遍历队列
	   for(String str:que1){
		   System.out.print(str+"->");
	   }
	   //打印元素个数
	   System.out.println("\n元素个数是:"+que1.size());
	   System.out.println("--------------------------------------------");
	   //出队列操作
	   int n=que1.size();
	   for(int i=0;i<n;i++){
		   System.out.println("元素"+que1.OutQueue()+"出队列");
	   }
	   //打印元素个数
	   System.out.println("\n元素个数是:"+que1.size());
	   System.out.println("--------------------------------------------");
    }
}

5.运行结果:
数据结构之队列(Java实现)_第3张图片

你可能感兴趣的:(经典程序,线性表,算法,数据结构,算法)