zoukankan      html  css  js  c++  java
  • 数组模拟队列



    原题链接

    数组模拟队列和数组模拟栈其实很类似,都是用一个数组来存储元素,用指针表示当前可以操作的位置。

    区别就是栈只能在栈顶进行操作,所以只需要有一个top指针指向栈顶。
    而队列可以在队头和队尾都进行操作(出队、入队),所以需要两个指针headtail指向队头和队尾。

    如果有元素入队,则tail加一,指向新元素。
    如果要出队,则head加一,指向原来队列的第二个元素,这个元素就是现在的对头。

    具体代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N = 1e5 + 5;
    int q[N], head, tail;            //用数组q模拟队列,head和tail分别指向队头和队尾
    
    void init() {
        head = 0;                    //初始时head和tail都指向0,表示没有元素
        tail = 0;
    }
    
    void Push(int x) {
        q[++tail] = x;               //tail加一,新元素加在tail指针指向的位置
    }
    
    void Pop() {
        ++head;                    
    }
    
    int Query() {
        return q[head + 1];          //注意要有加一
    }
    
    string Empty() {
        if(head < tail) {
            return "NO";
        } else {
            return "YES";
        }
    }
    
    int main() {
        int M;
        cin >> M;
        init();
        while(M--) {
            string op;
            int x;
            cin >> op;
            if(op == "push") {
                cin >> x;
                Push(x);
            } else if(op == "empty") {
                cout << Empty() << endl;
            } else if(op == "query") {
                cout << Query() << endl;
            } else if(op == "pop") {
                Pop();
            }
        }
    }
    
    
  • 相关阅读:
    Jquery源码分析(一)
    Lazyload 延迟加载效果
    20100128
    Linux共享库(so)动态加载和升级
    shell 数组
    Git常用命令解说
    linux shell 数组建立及使用技巧
    linux下查看用户及用户组的方法
    Zypper 用法
    linux shell 数组的长度计算、修改、循环输出等操作
  • 原文地址:https://www.cnblogs.com/linrj/p/13322200.html
Copyright © 2011-2022 走看看