数组模拟队列

简介: 文章目录前言一、关于队列二、队列的操作1.数组模拟队列必备属性2.向队尾插入一个元素x3.从对头弹出一个数4.查询对头元素5.判断队列是否为空三、例题, 代码1.AcWing 828. 模拟栈2.AC代码四、时间复杂度

文章目录

• 前言

• 一、关于队列

• 二、队列的操作

• 1.数组模拟队列必备属性

• 2.向队尾插入一个元素x

• 3.从对头弹出一个数

• 4.查询对头元素

• 5.判断队列是否为空

• 三、例题, 代码

• 1.AcWing 828. 模拟栈

• 2.AC代码

• 四、时间复杂度


前言

复习acwing算法基础课的内容,本篇为讲解基础算法:用数组模拟队列,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上


一、关于队列

在C++中,STL已经帮助我们实现队列,详细见:STL—queue,本篇博客中,讲解如何用数组去模拟栈,实现队列的一些功能.


二、队列的操作

1.数组模拟队列必备属性

int q[N];           //数组q中存储的就是队列中的元素
int hh;                 //hh表示的是对头,初始值为0
int tt = -1;            //tt表示的是队尾,初始值为-1,tt初始小于hh,证明队列里无元素

2.向队尾插入一个元素x

q[ ++ tt] = x;          //因为向队尾插入了一个元素,所以对头hh不变,对尾tt向后移动一位,并把x赋值到q数组中

3.从对头弹出一个数

hh ++;                  //直接把hh向后移动一位即可

4.查询对头元素

printf("%d", q[hh]);    //q[hh] 代表的就是对头元素

5.判断队列是否为空

if (tt < hh) printf("队列为空");
else printf("队列不空");

三、例题, 代码

1.AcWing 828. 模拟栈

本题链接AcWing 828. 模拟栈

本博客给出本题截图:

image.png

image.png

2.AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 100010;
int q[N], tt = -1, hh;
int main()
{
    int n;
    scanf("%d", &n);
    while (n -- )
    {
        string op;
        cin >> op;
        if (op == "push")
        {
            int x;
            scanf("%d", &x);
            q[ ++ tt ] = x;
        }
        else if (op == "pop") hh ++;
        else if (op == "empty")
        {
            if (tt < hh) printf("YES\n");
            else printf("NO\n");
        }
        else printf("%d\n", q[hh]);
    }
    return 0;
}

四、时间复杂度

关于数组模拟栈的各操作时间复杂度以及证明,后续会给出详细的说明以及证明过程,目前先鸽了。




目录
相关文章
|
6月前
|
存储 机器学习/深度学习 算法
模拟实现单链表、双链表、栈、队列——数组模拟
我们在数据结构中都学到过单链表、双链表、栈和队列,当我们实现的时候时使用结构体指针实现的。定义一个结构体,结构体中存储指针变量和存放数值的变量。当然,C++的STL库中已经有实现好的栈和队列,我们可以直接用。但是在做算法题时,有时候我们会发现超出时间限制。原因是我们用STL库中的栈和队列容器时,效率相对来说较慢。我们这时就引出用数组模拟实现栈和队列。用数组模拟实现的使用起来效率更高、更方便。当然,我们也会讲到用数组模拟实现单链表和双链表。
28 0
|
2月前
数据结构 模拟实现Queue队列(双链表模拟)
数据结构 模拟实现Queue队列(双链表模拟)
21 1
|
9月前
|
Java
java使用数组模拟队列、环形队列
队列是一个有序列表,可以用数组或链表来实现。遵循先入先出的原则。
|
5月前
|
消息中间件 前端开发 JavaScript
使用数组实现队列
使用数组实现队列
28 0
|
7月前
|
存储 Java
【数据结构】 队列(Queue)与队列的模拟实现
【数据结构】 队列(Queue)与队列的模拟实现
|
9月前
数组模拟链表、栈、队列
数组模拟链表、栈、队列
30 0
|
存储 算法 Java
java数据结构,一个案例带你用数组模拟队列,环形队列!
java数据结构,一个案例带你用数组模拟队列,环形队列!
115 0
java数据结构,一个案例带你用数组模拟队列,环形队列!
|
存储
设计一个名为Queue的类用于存储整数。在栈中,元素以“后进先出”的方式获取。在队列中,元素以“先进先出”方法获取。
设计一个名为Queue的类用于存储整数。在栈中,元素以“后进先出”的方式获取。在队列中,元素以“先进先出”方法获取。
70 0
|
存储 算法 前端开发
【前端算法】链表和数组实现队列的区别
比较链表和数组实现队列的性能
161 0
|
Java
Java数组模拟队列
队列的作用就像电影院前的人们站成的排一样:第一个进入附属的人将最先到达队头买票。最后排队的人最后才能买到票。
71 0