【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

相关文章
|
15天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
24天前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
41 1
|
26天前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
80 2
|
26天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
59 2
|
9天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
30 6
|
15天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
18天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
23天前
|
存储 算法 Java
Java 中常用的数据结构
【10月更文挑战第20天】这些数据结构在 Java 编程中都有着广泛的应用,掌握它们的特点和用法对于提高编程能力和解决实际问题非常重要。
24 6
|
24天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
26 1