数组模拟队列

简介: 文章目录前言一、关于队列二、队列的操作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;
}

四、时间复杂度

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




目录
相关文章
|
4月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
50 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
8月前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
59 0
|
9月前
数据结构 模拟实现Queue队列(双链表模拟)
数据结构 模拟实现Queue队列(双链表模拟)
65 1
|
存储 Java
【数据结构】 队列(Queue)与队列的模拟实现
【数据结构】 队列(Queue)与队列的模拟实现
数组模拟链表、栈、队列
数组模拟链表、栈、队列
51 0
|
存储 算法 Java
java数据结构,一个案例带你用数组模拟队列,环形队列!
java数据结构,一个案例带你用数组模拟队列,环形队列!
157 0
java数据结构,一个案例带你用数组模拟队列,环形队列!
|
前端开发 算法
【数据结构与算法】队列-模拟实现队列以及设计循环队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列是一种先进先出的数据结构,注意和栈进行区分,不要记混.
|
存储 Java 索引
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
159 0
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列