【Java数据结构】队列

简介:

队列

先进先出的线性表,它只允许在一端(队尾)进行插入操作,在另一端(队首)进行删除操作。与栈的插入和删除都在栈顶进行不同。


1.普通队列

实例代码:

存储类型为long的队列

package cn.deu;

public class Queue {
   //队列组合
   private long [] arr;
   //数组最大值
   private int MaxSize=0;
   //数组有效值
   private int num=0;
   //队头
   private int font=0;
   //队尾
   private int end=0;  
   
   public Queue(int n) {
	   this.MaxSize=n;
      arr=new long[n];
      num=0;
      font=0;
      end=-1;
   }
   
   //插入数据
   public void insert(long n){
	   arr[++end]=n;
	   num++;
   }
   
   //删除数据
   public long remove(){
	   num--;
	   return arr[font++];
   }
   
   //是否为空
   public boolean isEmpty(){
	   return (num==0);
   }
   
   //是否为满
   public boolean isFull(){
	   return (end==MaxSize-1);
   }
   
   //返回有效元素大小
   public long size(){
	   return num;
   }
   
   //刷新队列
   public void NewQueue(){
	   end=-1;
	   font=0;
   }
   
}

测试:

package en.edu.Test;

import cn.deu.Queue;

public class TestQueue {


	public static void main(String[] args) {
		Queue queue=new Queue(5);
		
		System.out.println(queue.isEmpty());
		
		queue.insert(50);
		queue.insert(20);
		queue.insert(10);
		queue.insert(2);
		queue.insert(1);
		
		System.out.println(queue.isEmpty());
		System.out.println(queue.isFull());
		
		while(!queue.isEmpty()){
			System.out.println(queue.remove());
		}
		
		if(queue.isFull()){
			queue.NewQueue();
		}
		
		queue.insert(20);
		System.out.println(queue.remove());
	}
}

结果:
true
false
true
50
20
10
2
1
20

2.优先级队列
核心思想:在优先级队列,数据项案关键字的值有序,这样关键字最小的数据项(捉着最大)总是在队头,数据项插入时会按照顺序插入到合适的位置。

模型:

package cn.deu;

public class PriorityQueue {
	   //队列组合
	   private long [] arr;
	   //数组最大值
	   private int MaxSize=0;
	   //数组有效值
	   private int num=0;
	   //队头就是数组的第一个,队尾就是数组的最后一个
	   
	   public PriorityQueue(int n) {
		   this.MaxSize=n;
	      arr=new long[n];
	      num=0;
	   }
	   
	   //插入数据
	   public void insert(long n){
		   //找到第一个小于n的,将n差到它后面
		   int i;
		   for(i=0;i<num;i++){
			   if(n>arr[i]){
				   break;
			   }
		   }
		   
		   for(int j=num;j>i;j--){
			   arr[j]=arr[j-1];
		   }
		   arr[i]=n;
		   num++;
	   }
	   
	   //删除数据
	   public long remove(){
		   //直接移除最后一项
		   long value=arr[num-1];
		   num--;
		   return value;
	   }
	   
	   //是否为空
	   public boolean isEmpty(){
		   return (num==0);
	   }
	   
	   //是否为满
	   public boolean isFull(){
		   return (num==MaxSize);
	   }
	   
	   //返回有效元素大小
	   public long size(){
		   return num;
	   }
	   
	   //刷新队列
	   public void NewQueue(){
		  num=0;
	   }
	   
	  //输出队头
	   public long getFont(){
		   return arr[0];
	   }
	   
	 //输出队尾
	   public long getEnd(){
		   return arr[num-1];
	   }
}

测试:

package en.edu.Test;

import cn.deu.PriorityQueue;

public class TeatQ {
		public static void main(String[] args) {
			PriorityQueue pq=new PriorityQueue(10);
			pq.insert(30);
			pq.insert(45);
			pq.insert(15);
			pq.insert(2);
			pq.insert(1);
			
			System.out.println("队头元素为"+pq.getFont());
			System.out.println("队尾元素为"+pq.getEnd());
			while(!pq.isEmpty()){
				long value=pq.remove();
				//从队尾向前输出
				System.out.print(value+" ");
			}
			System.out.println();
			
			pq.insert(3);
			pq.insert(2);
			pq.insert(1);
			
			System.out.println("队头元素为"+pq.getFont());
			System.out.println("队尾元素为"+pq.getEnd());
			
			pq.insert(0);
			
			System.out.println("队头元素为"+pq.getFont());
			System.out.println("队尾元素为"+pq.getEnd());
			
			pq.insert(4);
			
			System.out.println("队头元素为"+pq.getFont());
			System.out.println("队尾元素为"+pq.getEnd());
				
		}
}

转载请注明出处:http://blog.csdn.net/acmman/article/details/50301975

相关文章
|
26天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
37 0
|
4天前
|
存储
栈与队列练习题
栈与队列练习题
|
4天前
数据结构第四课 -----线性表之队列
数据结构第四课 -----线性表之队列
|
5天前
|
存储 Java
数据结构奇妙旅程之栈和队列
数据结构奇妙旅程之栈和队列
|
8天前
|
算法 索引
数据结构与算法-三种队列基础入门
数据结构与算法-三种队列基础入门
8 0
|
8天前
带你彻底理解栈和队列
带你彻底理解栈和队列
16 1
|
9天前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
24 1
Java程序员必须掌握的数据结构:HashMap
|
9天前
|
存储 安全 Java
Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
|
9天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
10天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
22 0