java 数据结构 用数组实现队列

代码内容

  1 package com.structure;
  2
  3 import java.util.Scanner;
  4
  5 /**
  6  * @auther::9527
  7  * @Description: 数组模拟队列
  8  * @program: jstl2
  9  * @create: 2019-10-05 08:58
 10  */
 11 public class ArrayQueueDemo {
 12     public static void main(String[] args) {
 13         Scanner scanner = new Scanner(System.in);
 14         //测试
 15         ArrayQueue queue = new ArrayQueue(3);
 16         char key = ‘ ‘; //接受用户输入
 17         boolean loop = true;  //循环终止判断器
 18         while (loop) {
 19             System.out.println("s(show):显示队列");
 20             System.out.println("(e(exit)):退出程序");
 21             System.out.println("a(add):添加数据到队列");
 22             System.out.println("g(get):从队列取出数据");
 23             System.out.println("h(head):查看队列头部的数据");
 24             System.out.println("按提示输入......");
 25             key = scanner.next().charAt(0);  //接收数据
 26             switch (key) {
 27                 case ‘s‘:
 28                     queue.showQueue();
 29                     break;
 30                 case ‘a‘:
 31                     System.out.println("请输入一个数");
 32                     int value = scanner.nextInt();
 33                     queue.addQueue(value);
 34                     break;
 35                 case ‘g‘:
 36                     try {
 37                         int res = queue.getQueue();
 38                         System.out.printf("取出的数是%d\n", res);
 39                     } catch (Exception e) {
 40                         System.out.println(e.getMessage());
 41                     }
 42                     break;
 43                 case ‘h‘:
 44                     try {
 45                         int res = queue.headQueue();
 46                         System.out.printf("队列头部的数是%d\n", res);
 47                     } catch (Exception e) {
 48                         System.out.println(e.getMessage());
 49                     }
 50                     break;
 51                 case ‘e‘:
 52                     scanner.close();
 53                     loop = false;
 54                     break;
 55                 default:
 56                     System.out.println("...输入不合法,请重新输入...");
 57                     break;
 58             }
 59         }
 60         System.out.println("程序退出....");
 61     }
 62 }
 63
 64 //使用数组模拟队列--编写一个ArrayQueue
 65 class ArrayQueue {
 66     private int maxSize; //数组的最大容量
 67     private int front;  //队列头
 68     private int rear; //队列尾
 69     private int[] arr; //存放数据的数组,模拟队列.
 70
 71     //创建队列的构造器
 72     public ArrayQueue(int arrMaxSize) {
 73         maxSize = arrMaxSize;
 74         arr = new int[maxSize];
 75         front = -1;
 76         rear = -1;
 77     }
 78
 79     //判断队列是否已经满了
 80     public boolean isFull() {
 81         return rear == maxSize - 1;
 82     }
 83
 84     //判断队列是否为空
 85     public boolean isEmpty() {
 86         return rear == front;
 87     }
 88
 89     //添加数据到队列
 90     public void addQueue(int n) {
 91         //判断队列是否已满
 92         if (isFull()) {
 93             System.out.println("队列已满,不能添加");
 94             return;
 95         }
 96         rear++; //指针后移
 97         arr[rear] = n;
 98     }
 99
100     //数据出队列
101     public int getQueue() {
102         //判断队列是否为空
103         if (isEmpty()) {
104             throw new RuntimeException("队列为空,不能取数据");
105         }
106         front++; //头部指针后移
107         return arr[front];
108     }
109
110     //显示队列的所有数据
111     public void showQueue() {
112         if (isEmpty()) {
113             System.out.println("队列为空,没有数据");
114             return;
115         }
116         for (int i = 0; i < arr.length; i++) {
117             System.out.printf("arr[%d]=%d\n", i, arr[i]);
118         }
119     }
120
121     //显示队列的头部数据,这个不是取出数据
122     public int headQueue() {
123         //判断是否为空
124         if (isEmpty()) {
125             System.out.println("队列为空,没有数据....");
126             throw new RuntimeException("队列为空,没有数据....");
127         }
128         return arr[front + 1];
129     }
130 }

ArrayQueue---用数组实现队列

原文地址:https://www.cnblogs.com/twuxian/p/11624001.html

时间: 2024-08-07 01:20:30

java 数据结构 用数组实现队列的相关文章

数据结构 - 基于数组的队列

队列Queue *队列也是一种线性结构 *相比于数组,队列对应的操作是数组的子集 *只能从一端(队尾)添加元素,从另一端(队首)取出元素 *队列是一种先进先出的数据结构(先到先得 First In First Out) 基于数组的队列实现的源码如下: package queue; public interface Queue<E> {        public void enqueue(E e);        public E dequeue();        public E getF

【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

  本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型   队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out).我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列

Java算法入门-数组&amp;链表&amp;队列

算法就是解决问题的步骤,在一般的项目中可能用不上,但是一旦涉及到高并发,高性能时,就不得不考虑算法的优劣. 设计原则和特性 设计原则:正确性,可读性,健壮性,高效率和低存储 特性:有穷性,确定性,可行性,有输入,有输出. 算法题入门体验 如何判断是一个数是2的整数次幂?常规方法使用循环,但是在学习了二进制的基础知识后,发现可以使用模运算来实现. 1 import java.util.Scanner; 2 3 public class base { 4 5 public static void m

学习java数据结构基础知识之队列

队列是先进先出. 利用java语言实现队列代码: /* * 队列 */ public class Queue { private int maxSize; //最大队列 private long[] queArray; //队列数组 private int front; //队头 private int rear; //队尾 private int nItems; //当前队列元素个数 //构造函数 public Queue(int s) { super(); this.maxSize = s;

Java数据结构-线性表之队列

队列(Queue)的定义:只允许在一端进行插入另一端进行删除操作的线性表.允许插入的一端称为队尾(rear) ,允许删除的一端称为队头(front). 具有"先进先出"特点. 队列也是线性表,所以也存在顺序结构和链式结构. 顺序队列: 对于队列,入队操作的解释为: (是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为0(1).) 判断队列是否已满: 如果没满则先给队尾元素赋值; 然后将队尾指针后移一位(对队尾指针赋值,Q->rear = Q->rear+1 ). 出

Java数据结构与算法(3):队列

队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除. 队列模型 队列的基本操作包括入队.出队操作.在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO). 队列的数组实现 对于每一个队列数据结构,保留一个数组items以及位置front和back,分别表示队列的两端,还要记录元素的个数size.操作过程应该是:当一个元素x入队,size和back增1,置items[back]=x:出队时,返回items[front],size减1,然后front增1. 初始队列: 入队: 出队

Java数据结构和算法(五)——队列

队列,queqe,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private int end; private int number; private int max; private Queqe(int maxsize){ array = new int[maxsize]; max = maxsize; front = 0; end = 0; number = 0; } pri

Java数据结构与算法(4) - 队列(Queue和PriorityQ)

队列: 先进先出(FIFO). 优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数据项后移.在图的最小生成树算法中应用优先级队列. 示例代码: package chap04.Queue; class Queue { private int maxSize; private long[] queArray; private int front; private int rear;

Java数据结构之数组

自定义数组(面向对象编程): 直接上代码: package com.xingej.algorithm.datastructure.array; /**  * 面向对象编程  *   * 自定义类数组  *   * 你一定要明白,这是在JDK基础之上的封装,要学会这种思路,其他框架如netty 也是在前者的基础上封装而来的,如有一  *   * 部分是封装的线程池  *   * @author erjun 2017年11月28日 下午9:42:10  */ public class MyArray