栈与队列小题

209 阅读2分钟

队列例题

详见洛谷官网:www.luogu.com.cn/problem/P19…

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

输入格式

输入两个整数 n,m。

输出格式

输出一行 n 个整数,按顺序输出每个出圈人的编号。

eg.

输入 #1

10 3

输出 #1

3 6 9 2 7 1 8 5 10 4

说明/提示

1<=m;n<=100;



import java.util.LinkedList;//队列导包
import java.util.Queue;
import java.util.Scanner;
//洛谷P1996
public class quan_quan {
    public static void main(String[] args) {
        Queue<Integer>q=new LinkedList<>();//创建对象
        Scanner scan = new Scanner(System.in);
        int n  =scan.nextInt();
        int m = scan.nextInt();
        for (int i = 1; i <=n; i++) {
            q.add(i);//填充数据第几号
        }
        int res=0;
        while (!q.isEmpty()){ //非空判断直到没人
            int x = q.poll();//删除并返回被删除的元素
            res++;
            if (res==m){
                System.out.print(x+" ");
                res=0;//m归零
            }
            else q.add(x);//添加序号开始第二轮判断
        }
    }
}

分析: 通过队列先进先出特性,可以对原组数据进行有次序的选择操作

栈例题

详见洛谷官网:www.luogu.com.cn/problem/P14…

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_i(长度不一定,以0结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以 0 结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

eg. 输入 #1

3 65 23 5 34 1 30 0

输出 #1

30 1 34 5 23 65 3

说明/提示

数据规模与约定

对于 100% 的数据,保证 0 <= a_i <= 2^{31}-1 ,数字个数不超过 100。

import java.util.Scanner;
import java.util.Stack;

//洛谷p1427
public class xiao_yu {
    public static void main(String[] args) {
        Stack<Integer>stack=new Stack<>();
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()){//是整型则继续读取
            int x=scan.nextInt();
            if(x==0){
                break;
            }
            stack.push(x);
        }
        while (!stack.isEmpty()){
            System.out.println(stack.pop());
        }
    }
}