加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】之队列的java实现(二)

发布时间:2020-12-15 06:32:04 所属栏目:安全 来源:网络整理
导读:在上一篇博文中通过java实现了队列的连续存储,下面来讨论队列的链式存储,即链队列。 链队列的定义: 队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。 链队列的数据存储形式: 链队列基本运算的实现: package study_02.datastr

在上一篇博文中通过java实现了队列的连续存储,下面来讨论队列的链式存储,即链队列。

链队列的定义:

队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。

链队列的数据存储形式:

链队列基本运算的实现:

package study_02.datastructure.queue;


/**
 * 链队列
 * @author WWX
 */
public class LinkQueue<T> {
	
	//链的数据结构
	private class Node{
		public  T data;
		public  Node next;
		//无参构造函数
		public Node(){}
		
		public Node(T data,Node next){
			this.data=data;
			this.next=next;
		}
	}
	//队列头指针
	private Node front;
	//队列尾指针
	private Node rear;
	//队列长度
	private int size=0;
	
	public LinkQueue(){
		Node n=new Node(null,null);
		n.next=null;
		front=rear=n;
	}
	
	/**
	 * 队列入队算法
	 * @param data
	 * @author WWX
	 */
	public void enqueue(T data){
		//创建一个节点
		Node s=new Node(data,null);
		//将队尾指针指向新加入的节点,将s节点插入队尾
		rear.next=s;
		rear=s;
		size++;
	}
	
	/**
	 * 队列出队算法
	 * @return
	 * @author WWX
	 */
	public  T dequeue(){
		if(rear==front){
			try {
				throw new Exception("堆栈为空");
			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}else{
			//暂存队头元素
			Node p=front.next;
			T x=p.data;
			//将队头元素所在节点摘链
			front.next=p.next;
			//判断出队列长度是否为1
			if(p.next==null)
				rear=front;
			//删除节点
			p=null;
			size--;
			return  x;
		}
	}
	
	/**
	 * 队列长队
	 * @return
	 * @author WWX
	 */
	public int size(){
		return size;
	}
	
	/**
	 * 判断队列是否为空
	 * @return
	 * @author WWX
	 */
	public  boolean isEmpty(){
		return  size==0;
		
	}
	
	
	public String toString() {
		if(isEmpty()){
			return "[]";
		}else{
			StringBuilder sb = new StringBuilder("[");
			for(Node current=front.next;current!=null;current=current.next){
				sb.append(current.data.toString() + ",");
			}
			int len = sb.length();
			return sb.delete(len - 2,len).append("]").toString();
		}
	}
	
	//测试
	public static void main(String[] args) {
		LinkQueue<Integer> queue=new LinkQueue<Integer>();
		queue.enqueue(1);
		queue.enqueue(2);
		queue.enqueue(3);
		queue.enqueue(4);
		queue.enqueue(5);
		queue.enqueue(6);
		System.out.println(queue);
		System.out.println("出队:"+queue.dequeue());
		System.out.println("队列长度="+queue.size());
		System.out.println(queue);
		System.out.println("出队:"+queue.dequeue());
		System.out.println("队列长度="+queue.size());
		System.out.println(queue);
		System.out.println("出队:"+queue.dequeue());
		System.out.println("队列长度="+queue.size());
		System.out.println(queue);
	}
}

输出结果:

[1,2,3,4,5,6] 出队:1 队列长度=5 [2,6] 出队:2 队列长度=4 [3,6] 出队:3 队列长度=3 [4,6]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读