【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

相关文章
|
14天前
|
存储 Java C++
Java中的数据结构选择指南
Java中的数据结构选择指南
|
6天前
|
缓存 算法 安全
Java中的数据结构与算法优化策略
Java中的数据结构与算法优化策略
|
5天前
|
设计模式 安全 Java
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
10 1
|
15天前
|
存储 算法 搜索推荐
Java数据结构与算法优化
Java数据结构与算法优化
|
13天前
|
存储 安全 Java
如何在Java中实现自定义数据结构:从头开始
如何在Java中实现自定义数据结构:从头开始
|
5天前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
9 0
|
7天前
|
存储 算法 搜索推荐
使用Java实现高效的数据结构与算法
使用Java实现高效的数据结构与算法
|
7天前
|
存储 算法 搜索推荐
Java中的数据结构与算法实现
Java中的数据结构与算法实现
|
8天前
|
算法 搜索推荐 Java
在Java中实现高效的算法与数据结构
在Java中实现高效的算法与数据结构
|
10天前
|
JavaScript
数据结构(用 JS 实现栈和队列【三种方式】)
数据结构(用 JS 实现栈和队列【三种方式】)
16 0