【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

时间: 2024-11-09 00:30:54

【Java数据结构】队列的相关文章

JAVA数据结构--队列及优先队伍

注意优先队列在插入时已排序.故在删除,不是以原始插入数据为顺序的. 还要了解两种队列的优点缺少,适合应用的场合... 1 class Queue 2 { 3 private int maxSize; 4 private long[] queArray; 5 private int front; 6 private int rear; 7 private int nItems; 8 9 public Queue(int s) 10 { 11 maxSize = s; 12 queArray = n

java数据结构与算法之双向循环队列的数组实现方法_java

本文实例讲述了java数据结构与算法之双向循环队列的数组实现方法.分享给大家供大家参考,具体如下: 需要说明的是此算法我并没有测试过,这里给出的相当于伪代码的算法思想,所以只能用来作为参考! package source; public class Deque { private int maxSize; private int left; private int right; private int nItems; private long[] myDeque; //constructor p

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例_php实例

队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO). PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现. SplQueue类摘要如下: SplQueue简单使用如下: 复制代码 代码如下: $queue = new SplQueue();   /**  * 可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:  * (1)SplDoublyL

[数据结构] 队列

队列 队列是一种操作受限制的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.  队列中没有元素时,称为空队列.在队列这种数据结构中,最先插入的元素将是最先被删除的元素:反之最后插入的元素将是最后被删除的元素,因此队列又称为"先进先出"(FIFO-first in first out)的线性表. 队列空的条件:front=rear 队列满的条件: rear = MAXSIZE 顺序队列 建立顺

java如何队列同步redis?

问题描述 java如何队列同步redis? 就是数据批量插入redis,然后再同步插入到数据库里面,怎么搞 解决方案 java redis使用之利用jedis实现redis消息队列0135 java redis使用之利用jedis实现redis消息队列java redis使用之利用jedis实现redis消息队列 解决方案二: 一般是数据先插入数据库,然后再利用触发器等把数据插入redis.或者用过期方式来从数据库同步数据到redis

编写一个JAVA的队列类

  根据这些特点,对队列定义了以下六种操作: enq(x) 向队列插入一个值为x的元素; deq() 从队列删除一个元素; front() 从队列中读一个元素,但队列保持不变; empty() 判断队列是否为空,空则返回真; clear() 清空队列; search(x) 查找距队首最近的元素的位置,若不存在,返回-1. Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector 可以快速实现JAVA的队列类. public class Queue extends

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

  这篇文章主要介绍了PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例,需要的朋友可以参考下 队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO). PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现. SplQueue类摘要如下: SplQueue简单使用如下: 代码如下: $queue = new SplQueue(); /** * 可见

链表-关于数据结构队列问题

问题描述 关于数据结构队列问题 2C 用队列做一个模拟抢红包的小程序,但现在还没有思路,望前辈不吝啬赐教之,谢谢. 解决方案 数据结构之队列数据结构--队列实现舞伴配对问题数据结构-栈和队列

JAVA数据结构系列 栈

java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为它要维护自己的指针(Next)引用. package com.rsc.stack; import java.util.LinkedList; /** * 利用链表实现的栈 * @author 落雨 * http://ae6623.cn * @param <T> */ public class Li

java数据结构和算法 22只鞋子,拿多少次可以拿一双

问题描述 java数据结构和算法 22只鞋子,拿多少次可以拿一双 22只鞋子 5双运动鞋,4双凉鞋,2双礼服鞋放在看不到的盒子里, 一次拿一只 最少拿多少次可以拿一双鞋子(左右脚也要对应) 解决方案 假设已经拿了5只左脚的运动鞋,4只凉鞋,2只礼服鞋,那么再拿一只,一定可以组成一双鞋,所以是12次 解决方案二: 应该是12次,不信的话你在问其他人. 解决方案三: 最少几次?2最多几次?12.....