Structure de données - file d'attente (implémentation Java)
description du blog
Les informations contenues dans l'article en cause de l'Internet et l'organisation conclusion personnelle, ce qui signifie que l'expérience de l'apprentissage individuel et résumé, si la violation, s'il vous plaît me contacter pour supprimer, je vous remercie!
brève introduction
Une file d' attente est une forme linéaire particulière, est particulière en ce qu'elle permet de supprimer uniquement à l'extrémité avant de la table (avant), alors que l'extrémité arrière de l' insertion, la table (arrière), et de la pile comme une file d' attente par l'exploitation table de restriction linéaire. Désigné sous l'extrémité de queue de la fin, opération de suppression sera appelée tête d'insertion de fonctionnement .
Une file d' attente est une liste ordonnée, vous pouvez utiliser un tableau ou une liste chaînée à réaliser, suivre le FIFO principe
file d'attente Array
diagramme
penser
1, l'avant, la valeur initiale réelle de -1 et la valeur maximale MaxSize
2, les conditions de la colonne d'air: = arrière avant
3, une condition complète de file d'attente: real = MaxSize-1
code mise en œuvre
package queue;
import com.sun.source.tree.BreakTree;
import java.util.Iterator;
import java.util.Scanner;
public class ArrayQueue {
public static void main(String[] args) {
//创建一个对象
Array queue = new Array(3);
char key = ' ';
Scanner scanner = new Scanner(System.in);
boolean loop = true;
while (loop){
System.out.println("请输入字符操作");
System.out.println("输入s:显示队列");
System.out.println("输入a:添加数据");
System.out.println("输入g:取出数据");
System.out.println("输入h:查看队列头");
System.out.println("输入e:退出程序");
key = scanner.next().charAt(0); //接收一个字符
switch (key){
case 's':
queue.showQueue();
break;
case 'a':
System.out.println("请输入一个数");
int value = scanner.nextInt();
queue.addQueue(value);
break;
case 'g':
try {
int res = queue.getQueue();
System.out.printf("取出的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int res = queue.headQueue();
System.out.printf("队列头的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop = false;
break;
default:
break;
}
}
System.out.println("程序退出");
}
}
//使用数组模拟队列
class Array{
private int maxSize; //表示最大的容量
private int front; //对列头
private int rear; //队列尾
private int[] arr; //存放数据
//创建队列的构造器
public Array(int arrMaxSize){
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1; //指向队列头
rear = -1; //指向队列尾
}
//判断队列是否满了
public boolean isFull(){
return rear == maxSize - 1;
}
//判断队列是否为空
public boolean isEmpty(){
return rear == front;
}
//添加数据到队列
public void addQueue(int n){
if (isFull()){
System.out.println("队列满了,不能加数据了");
return;
}
rear++; //rear后移
arr[rear] = n;
}
//获取队列的数据
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
front++; //front后移
return arr[front];
}
//显示队列的所有数据
public void showQueue(){
//遍历
if (isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
for (int i = 0; i < arr.length; i++) {
System.out.printf("arr[%d]=%d\n",i,arr[i]);
}
}
//显示队列的头数据
public int headQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
return arr[front + 1];
}
}
test
Notez que vous devez ajouter des données sera accessible ans.
défaut
Tableau ne peut être utilisé qu'une seule fois
réseau annulaire analogique utilisant un réseau
diagramme
penser
1, la valeur initiale de la police est de 0, le premier élément est la file d'attente
2, une réelle valeur initiale est 0, l'élément à un dernier élément de la file d'attente, (a position libre comme volonté convention)
3, les conditions de la colonne complète: avant (réel 1) mod = MaxSize
4, les files d'attente vides conditions: real = devant
5, le nombre de files d'attente de données valides: (real + MaxSize-avant) mod MaxSize
code
package queue;
import java.util.Scanner;
public class CricleArrayQueue {
public static void main(String[] args) {
//创建一个对象
CricleArray queue = new CricleArray(4); //有效数据为3
char key = ' ';
Scanner scanner = new Scanner(System.in);
boolean loop = true;
while (loop){
System.out.println("请输入字符操作");
System.out.println("输入s:显示队列");
System.out.println("输入a:添加数据");
System.out.println("输入g:取出数据");
System.out.println("输入h:查看队列头");
System.out.println("输入e:退出程序");
key = scanner.next().charAt(0); //接收一个字符
switch (key){
case 's':
queue.showQueue();
break;
case 'a':
System.out.println("请输入一个数");
int value = scanner.nextInt();
queue.addQueue(value);
break;
case 'g':
try {
int res = queue.getQueue();
System.out.printf("取出的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int res = queue.headQueue();
System.out.printf("队列头的数据是%d\n",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop = false;
break;
default:
break;
}
}
System.out.println("程序退出");
}
}
//使用数组模拟环形队列
class CricleArray{
private int maxSize; //表示最大的容量
private int front; //对列头
private int rear; //队列尾
private int[] arr; //存放数据
//创建队列的构造器
public CricleArray(int arrMaxSize){
maxSize = arrMaxSize;
arr = new int[maxSize];
}
//判断队列是否满了
public boolean isFull(){
return (rear + 1) % maxSize == front;
}
//判断队列是否为空
public boolean isEmpty(){
return rear == front;
}
//添加数据到队列
public void addQueue(int n){
if (isFull()){
System.out.println("队列满了,不能加数据了");
return;
}
arr[rear] = n;
rear = (rear + 1) % maxSize; //rear后移
}
//获取队列的数据
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
int value = arr[front];
front = (front + 1) % maxSize;//front后移
return value;
}
//显示队列的所有数据
public void showQueue(){
//遍历
if (isEmpty()){
System.out.println("");
throw new RuntimeException("");
}
for (int i = front; i < front+size(); i++) {
System.out.printf("arr[%d]=%d\n",i % maxSize,arr[i % maxSize]); //格式化输出
}
}
//求出当前队列有效数据的个数
public int size(){
return (rear + maxSize -front) % maxSize;
}
//显示队列的头数据
public int headQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
return arr[front];
}
}
test
Merci
Baidu Encyclopédie
Universal Network
Et un travailleur possède