模拟队列操作

给出一系列队列操作,包括
入队,用数字1表示,比如1 2,表示将元素2入队
出队,用数字2表示,表示将队首出队
访问队首,用数字3表示,表示访问队首元素
当某个操作不合法时,请输出impossible!

输入

第一行一个整数n,表示操作次数
接下来n行,每行是一种操作

输出

访问队首元素时请输出队首元素
当某个操作不合法时请输出impossible!

样例输入 
6
2
1 2
3
1 3
2
3
样例输出 
impossible!
2
3
解析

对队列操作函数的运用

代码
#include<bits/stdc++.h>
using namespace std;
/*队列:先进先出
1.创建一个队列:queue<int>q;
2.入队:q.push(x)
3.出队:q.pop()
4.获取队首元素:q.front()
5.求队内元素个数:q.size()
6.判断队列是否为空:q.empty()*/
int main(){
    int n;
    cin>>n;
    queue<int>q;
    for(int i=1;i<=n;i++){
        int c;
        cin>>c;
        if(c==1) {
            int x;
            cin>>x;
            q.push(x);
        }
        else if(c==2){
            if(q.empty()) cout<<"impossible!"<<endl;
            else{
                q.pop();
            }
             
        }
        else if(c==3) {
            if(q.empty()) cout<<"impossible!"<<endl;
        else cout<<q.front()<<endl;
        }
    }
     
     
 
 
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用两个链栈模拟队列操作进入队列,从队列输出的操作的示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; } Node; typedef struct queue { Node *stack1; Node *stack2; } Queue; void initQueue(Queue *q) { q->stack1 = NULL; q->stack2 = NULL; } void pushQueue(Queue *q, int x) { Node *newNode = (Node*)malloc(sizeof(Node)); newNode->data = x; newNode->next = NULL; if (q->stack1 == NULL) { q->stack1 = newNode; } else { Node *temp = q->stack1; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } } int popQueue(Queue *q) { if (q->stack1 == NULL && q->stack2 == NULL) { printf("Queue is empty.\n"); return -1; } if (q->stack2 == NULL) { while (q->stack1 != NULL) { Node *temp = q->stack1; q->stack1 = q->stack1->next; temp->next = q->stack2; q->stack2 = temp; } } Node *temp = q->stack2; int x = temp->data; q->stack2 = q->stack2->next; free(temp); return x; } int main() { Queue q; initQueue(&q); pushQueue(&q, 1); pushQueue(&q, 2); pushQueue(&q, 3); printf("%d\n", popQueue(&q)); printf("%d\n", popQueue(&q)); printf("%d\n", popQueue(&q)); printf("%d\n", popQueue(&q)); return 0; } ``` 该代码使用两个链栈模拟队列,其中一个栈(stack1)用于入队操作,另一个栈(stack2)用于出队操作。当需要进行出队操作时,如果stack2不为空,则直接弹出栈顶元素;否则,将stack1中的所有元素依次弹出压入stack2中,然后再弹出栈顶元素。由于每个元素最多入栈和出栈一次,所以该算法的时间复杂度为O(n)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值