持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
👨🎓作者简介:一位喜欢写作,计科专业的大三菜鸟
🏡个人主页:starry陆离 的个人主页
如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦
1.每日一题
原题链接:戳我戳我
描述
请你实现一个队列。
操作:
push x:将 x 加入队尾,保证 x 为 int 型整数。
pop:输出队首,并让队首出队
front:输出队首:队首不出队
输入描述:
第一行为一个正整数 n ,代表操作次数。(1≤n≤100000)
接下来的 n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。
输出描述:
如果操作为push,则不输出任何东西。
如果为另外两种,若队列为空,则输出 "error“
否则按对应操作输出。
2.测试案例
6
push 1
pop
front
push 2
push 3
pop
1
error
2
3.Queue类实现
用Java自带的队列实现,代码如下,只需要做输入获取的处理与三种操作的判断即可,剩下的事情就是调用对应的类方法
Modifier_and_Type | Method and Description |
---|---|
boolean | add(E e) 将指定的元素插入到此队列中,如果可以立即执行此操作,而不会违反容量限制, true 在成功后返回 IllegalStateException 如果当前没有可用空间,则抛出IllegalStateException。 |
E | element() 检索,但不删除,这个队列的头。 |
boolean | offer(E e) 如果在不违反容量限制的情况下立即执行,则将指定的元素插入到此队列中。 |
E | peek() 检索但不删除此队列的头,如果此队列为空,则返回 null 。 |
E | poll() 检索并删除此队列的头,如果此队列为空,则返回 null 。 |
E | remove() 检索并删除此队列的头。 |
import java.util.*;
public class Main{
public static void main(String args[]){
Queue<Integer> q=new LinkedList<Integer>();
Scanner in=new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
int num;
String[] strs;
while(n--!=0){
strs=in.nextLine().split(" ");
//入队
if(strs[0].equals("push")){
q.add(Integer.parseInt(strs[1]));
}else if(strs[0].equals("pop")){
//队不空,队首出列
if(!q.isEmpty()){
System.out.println(q.poll());
}else{
System.out.println("error");
}
}else if(strs[0].equals("front")){
//队不空,输出队首
if(!q.isEmpty()){
System.out.println(q.peek());
}else{
System.out.println("error");
}
}
}
}
}
4.数组实现队列
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int n = Integer.parseInt(scan.nextLine()) ;
MyQueue q = new MyQueue(n+1);
while(scan.hasNextLine()) {
String str = scan.nextLine() ;
String arr[] = str.split(" ") ;
if(arr[0].equals("push")) {
q.push(Integer.parseInt(arr[1])) ;
} else if(arr[0].equals("pop")) {
q.pop() ;
} else {
q.front() ;
}
}
}
}
class MyQueue{
int []arr;//用数组实现队列
int maxSize;//队列的大小
int front;//指示队列首下标
int rear;//指示队尾下标
public MyQueue(int maxSize){
this.maxSize=maxSize;
arr=new int[maxSize];
front=-1;
rear=-1;
}
//添加数据
public void push(int val){
//如果队列满了
if(rear==maxSize){
System.out.println("error");
}else{
//添加在队列尾部
rear++;
arr[rear]=val;
}
}
//查看头部数据
public void front(){
if(isEmpty()){
System.out.println("error");
}else{
System.out.println(arr[front+1]);
}
}
//取出头部数据
public void pop(){
if(isEmpty()){
System.out.println("error");
}else{
front++;
System.out.println(arr[front]);
}
}
//判断队列空
public boolean isEmpty(){
if(rear==front){
return true;
}
return false;
}
}
🍁每日推荐:牛客网-面试神器