队列【模板】

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

请你实现一个队列。

操作:

push x:将 x x\ x 加入队尾,保证 x x\ x 为 int 型整数。

pop:输出队首,并让队首出队

front:输出队首:队首不出队

输入描述:

第一行为一个正整数 n n\ n ,代表操作次数。(1≤n≤100000)(1 \leq n \leq 100000)(1≤n≤100000)

接下来的 n n\ n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。

输出描述:

如果操作为push,则不输出任何东西。

如果为另外两种,若队列为空,则输出 "error“

否则按对应操作输出。

输入:

 

6
push 1
pop
front
push 2
push 3
pop

输出

1
error
2

 答案:

#include<bits/stdc++.h>
using namespace std;
int s[100000];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int front=0,end=0;
    int n;
    cin>>n;
    while(n--){
        string m;
        int k;
        cin>>m;
       if(m=="push"){
           cin>>k;
           s[end]=k;
           end++;
       }else if(m=="pop"){
           if(front!=end){
               cout<<s[front]<<endl;
               s[front]=0;
               front++;
           }else{
               cout<<"error"<<endl;
           }
       }else if(m=="front"){
           if(front!=end){
               cout<<s[front]<<endl;
           }else{
               cout<<"error"<<endl;
           }
       }
    }
    return 0;
}

解释:

在这里我是用数组的方法解题队列就是先进后出相当于一个有约束的数组,在本题中是用了正常的队列占用空间较大,若要节省空间可使用循环队列 

ai解释:

这段代码实现了一个简单的队列(Queue)操作模拟,但有一点需要注意,它并没有完全遵循队列的严格定义,特别是在处理"pop"操作时。在标准的队列操作中,一旦元素被"pop"出队列,该元素应该从队列中完全移除,而不是仅仅将其值设置为0。不过,这里我们主要关注代码的逻辑和功能。

代码的主要功能包括:

  1. 初始化:通过ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);来加速输入输出。
  2. 队列操作:通过frontend两个指针来模拟队列的头部和尾部。front指向队列的第一个元素(如果队列不为空),而end指向队列中最后一个元素的下一个位置(即队列的容量)。
  3. 接收指令:循环接收指令,每次读取一个指令字符串m。根据指令的不同,执行不同的操作:
    • "push":读取一个整数k,将其添加到队列的末尾(s[end] = k; end++;)。
    • "pop":如果队列不为空(front != end),则输出队列的第一个元素(s[front]),然后将front指针向前移动一位(front++),并打印该元素的值。如果队列为空,则打印"error"
    • "front":如果队列不为空,则输出队列的第一个元素(s[front])的值。如果队列为空,则打印"error"

注意

  • 代码中s[front]=0;这一行其实是不必要的,因为front指针在pop操作后会向前移动,即使不将s[front]设置为0,也不会影响后续操作。而且,这样做可能会误导阅读代码的人,以为队列中的元素被物理删除了,而实际上只是通过移动指针来模拟删除。
  • 在实际应用中,如果队列需要频繁地进行pop操作,并且队列的元素不是简单的整数,或者需要更复杂的操作(如保持元素的顺序等),可能需要使用标准库中的queue容器或自己实现更复杂的队列结构。
  • 此外,由于数组s的大小是固定的(这里为100000),如果n非常大或者push操作非常频繁,可能会导致数组越界。在实际应用中,可能需要考虑动态调整数组大小或使用链表等数据结构来实现队列。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值