循环队列(数据结构实训)

题目:

标准输入输出
题目描述:
根据给定的空间构造顺序循环队列,规定队满处理方法为少用一个元素空间。例如,给定5个元素空间构造循环队列,则只能存放4个元素。试根据入队及出队操作判断队列最后的元素存放情况,并输出最后队列中的元素值,即完成给定入队及出列操作后一次性全部出队的元素值。要求采用顺序队列完成。
输入:
输入的第一行为一个自然数n,表示要求构造的顺序循环队列空间数。第二行为操作次k,接下来k行为出队入队操作,每行各代表一次操作。入队用in表示,出队用out表示,如果是入队,则in隔一空格后为一整数,表示入队元素值。

输出:
输出完成所有入队出队操作后,一次性出队元素。用一个空格隔开。可以假定队在完成所有操作后不为空。

输入样例:
4
7
in 1
in 2
in 5
in 6
out
out
in 8

输出样例:
5 8

代码:

方法一(模拟队列):

import java.util.*;

public class Xingyuxingxi {

    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
	int a;
	a=sc.nextInt();
	int b=sc.nextInt();
	int []g=new int[a+1];//下标从1开始使用
	int n=0;
	int m=0;
	while(b--!=0)
	{
		String c=sc.next();
		if(c.equals("in"))
		{
			int d=sc.nextInt();
			if(n<a-1)//题目所储存的元素比空间少1
			{
				g[++n]=d;
				if(m==a-1)//如果删除元素下标到达最大储存下标则从头开始删除
				{
					m=0;
				}
			}
		}
		else
		{
			g[++m]=-1;//被删除的元素用-1表示
			if(n==a-1)//如果添加元素的下标到达最大储存下标则从头开始添加
			{
				n=0;
			}
		}
	}
		if(m==0)m++;
        //要求按入队顺序输出
		for (int i = m+1; i < a; i++) {//删除下标后面的元素即为先入队的
			System.out.print(g[i]+" ");
		}
		for (int i = 1; i <=m; i++) {//添加下标后面的元素即为后入队的
			if(g[i]!=-1)
			{
				System.out.print(g[i]+" ");
			}
		}
    }
}

方法二(队列):

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;

public class Xingyuxingxi {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        Queue<Integer>dui = new ArrayDeque<Integer>();
        int b= sc.nextInt();
        while(b--!=0)
        {
            String c=sc.next();
            if(c.equals("in"))
            {
                int d=sc.nextInt();
                if(dui.size()<a-1)
                {
                    dui.add(d);
                }
            }
            else
            {
                dui.poll();
            }
        }
        Object []x= dui.toArray();
        for (int i = 0; i < dui.size(); i++) {
            System.out.print(x[i]+" ");
        }
    }
}
/*
创建一个队列

这里使用实现类ArrayDeque
size()方法,返回队列长度
add()方法,将指定元素插入此队列的末尾。
poll()方法,删除队头元素,并获取该元素
toArray()方法,按顺序返回元素

以下为java1.6版本的Queue实现类
AbstractQueue,ArrayBlockingQueue,ArrayDeque,ConcurrentLinkedQueue,DelayQueue,LinkedBlockingDeque,LinkedBlockingQueue,LinkedList,PriorityBlockingQueue,PriorityQueue,SynchronousQueue

以下为java1.8版本的Queue实现类
AbstractQueue,ArrayBlockingQueue,ArrayDeque,ConcurrentLinkedDeque,ConcurrentLinkedQueue,DelayQueue,LinkedBlockingDeque,LinkedBlockingQueue,LinkedList,LinkedTransferQueue,PriorityBlockingQueue,PriorityQueue,SynchronousQueue
*/

相关推荐

  1. 循环队列(数据结构)

    2023-12-07 21:42:07       55 阅读
  2. 哈希查找(数据结构)

    2023-12-07 21:42:07       64 阅读
  3. 折半查找(数据结构)

    2023-12-07 21:42:07       65 阅读
  4. 顺序查找(数据结构)

    2023-12-07 21:42:07       56 阅读
  5. 数据结构——顺序队列(循环)

    2023-12-07 21:42:07       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 21:42:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 21:42:07       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 21:42:07       82 阅读
  4. Python语言-面向对象

    2023-12-07 21:42:07       91 阅读

热门阅读

  1. 动态规划求解完全背包问题(c++实现)

    2023-12-07 21:42:07       52 阅读
  2. PyCharm 环境配置 Python

    2023-12-07 21:42:07       53 阅读
  3. Redis常用指令

    2023-12-07 21:42:07       59 阅读
  4. opencv读取二进制灰度图并显示

    2023-12-07 21:42:07       42 阅读
  5. 配置spring boot3后redis NOAUTH Authentication required

    2023-12-07 21:42:07       62 阅读