【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

相关文章
|
13天前
|
存储 缓存 算法
【数据结构】栈和队列的模拟实现(两个方式实现)
【数据结构】栈和队列的模拟实现(两个方式实现)
|
1天前
数据结构 栈 / 队列(第9天)
数据结构 栈 / 队列(第9天)
|
1天前
|
存储 算法 程序员
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
|
2天前
数据结构——栈和队列
数据结构——栈和队列
|
2天前
|
缓存 安全 Java
全面解读ConcurrentHashMap:Java中的高效并发数据结构
全面解读ConcurrentHashMap:Java中的高效并发数据结构
7 2
|
2天前
|
算法 Java 索引
12.12_黑马数据结构与算法笔记Java
12.12_黑马数据结构与算法笔记Java
12 1
|
3天前
|
C语言 C++
【数据结构】C语言实现:栈(Stack)与队列(Queue)
【数据结构】C语言实现:栈(Stack)与队列(Queue)
|
4天前
|
监控 安全 Java
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
5 0
|
4天前
|
消息中间件 监控 Java
Java一分钟之-Kafka:分布式消息队列
【6月更文挑战第11天】Apache Kafka是一款高性能的消息队列,适用于大数据处理和实时流处理,以发布/订阅模型和分布式设计处理大规模数据流。本文介绍了Kafka基础,包括生产者、消费者、主题和代理,以及常见问题:分区选择、偏移量管理和监控不足。通过Java代码示例展示了如何创建生产者和消费者。理解并妥善处理这些问题,结合有效的监控和配置优化,是充分发挥Kafka潜力的关键。
12 0
|
5天前
|
算法 调度 Python
数据结构与算法-队列篇
数据结构与算法-队列篇
11 3