• 构建队列,数组版本


    队列作为基本的数据结构,是每个coder所必须掌握的。

    队列在逻辑上就像是一条打饭的长队,排在前面的先打到饭(先进先出)。

    这里用一个数组用以构造一个队列,并设置两个指向,head指向队首,tail指向队尾,初始状态是head与tail指向同一位置(队列为空)

    队列有两个操作:入队与出队。

    1.入队:对比打饭排队的场景,新来的人排在后面,这是队尾tail需向后移一位。

    2.出队:已经打好饭的人就可以出去了,这时队头也需向后移一位,让后面的人成为队头。

    注意:

    当head与tail都移到数组末端,又该如何?

    数组虽然在逻辑上已经为空,但是已经没有办法再入队了!

    所以我们需要拿出地圆思想,把该数组看做一个没有首尾限制的空间,即数组最后一位的下一位就是第一位(如何让head与tail从数组尾部变为首部?取余操作即可)。

    那么队列如果满了该如何判别:tail后一位指向若是head,那么就为满(因为head之后,tail之前的空间此时都已被占用,这两段空间是相连的)

    代码如下:

    #include<iostream>
    using namespace std;
    
    //队列数组 
    /*队列数组优化方案: 
        为保证数组空间被充分利用,可不遵守数组的首末位置为队列的首末位置
        而是设置首末端指向:head,tail;将数组看做一个首末相连的空间 
        head指向的便是队列头部,tail指向尾部
        若head与tail指向同一位置,那么说明队列为空
        若head在tail前一个位置,说明队列已满 
    */
    int a[10];
    int head = 0;
    int tail = 0; 
    
    void insert(int value){
        int temp = (tail+1)%10;
        if(temp==head){
            throw "queue full error";
        }
        a[tail]=value;
        tail=temp;
    }
    
    int dequeue(){
        if(tail == head){
            throw "queue empty error";
        }
        int value = a[head];
        head = (head+1)%10;
        return value;
    }
    
    int main(){
        while(1){
            cout<<"这里是一个队列结构,1.入队,2.出队"<<endl<<"请输入:";
            int select;
            cin>>select;
            if(select==1){
                cout<<"请输入入队值:";
                int value;
                cin>>value;
                insert(value);
            } else{
                cout<<"队首为:"<<dequeue()<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    selenium批量执行脚本操作
    Monkey压力测试操作步骤说明
    loadrunner整体压测执行操作步骤
    selenium3+python3.6爬页面源码的代码
    unittest_API自动化脚本应用
    Python3.7版本unittest框架添加用例的方法
    python3中报错:TypeError: 'range' object doesn't support item deletion
    构建Hadoop集群在线datanode不在线
    Nomodulenamed pip._internal怎么解决
    模拟登陆京东并访问我的订单
  • 原文地址:https://www.cnblogs.com/tz346125264/p/7436492.html
Copyright © 2020-2023  润新知