• 数据结构之队列C++版



    #include "stdafx.h"
    /*

    队列是一种先进先出的线性表
    队列的核心是对头部和尾部索引的操作

     

     

    如上图所示,当对头索引移动到最前面6,队尾又不不再末尾0的位置,那么如果不循环利用此栈,队列就满了,为此采用(f+1%maxSize)的方式进行

    当对头索引到6的位置 求余结果恰好为0 又回到对头了。这便实现了循环利用。(注意maxSize=6+1,这是c++数组特性决定了的)
    */
    template <class T>
    class BaseQueuq {
      //返回对头元素给X
      virtual bool front(T &x) = 0;
      //进队
      virtual bool enQueue(T &x) = 0;
      //出队
      virtual bool deQueue() = 0;
      //清空队列
      virtual void clear() = 0;
    };
    template <class T>
    class Queue :public BaseQueuq<T> {
      int _indexF, _indexR,_maxSize;
      T *_queue;
    public:
      Queue(int maxSize){
        _maxSize = maxSize;
        _queue = new T[_maxSize];
        _indexF = _indexR = 0;
      }
      bool front(T &x) {
        if (isEmpty()) {
          return false;
        }
        else {
          x = _queue[_indexF];
          return true;
        }
      }
      bool enQueue(T &x) {
    i    f (isFull()) {
          //over flow
          return false;
        }
        else {
          _indexF=(_indexF+1)%_maxSize; //对头指针前进一
          _queue[_indexF] = x;
          return true;
        }
      }
      bool deQueue() {
        //ENTER
        if (isFull()) {
          //over flow
          return false;
        }
        else {
          _indexR = (_indexR+1) % _maxSize; //对尾指针向前移动1
          return true;
        }
      }
      void clear() {
        _indexF = _indexR = 0;
      }
      bool isFull() {
        if ((_indexR + 1) % _maxSize == _indexF) {//因为循环队列 要留一个空间就是要与空队列作为区分
          return true;
        }
        else {
          return false;
        }
      }
      bool isEmpty() {
        return _indexF == _indexR;
      }
    };


    int main()
    {
    int i = 3,j;
    Queue<int> *test = new Queue<int>(5);
    test->enQueue(i);
    test->front(j);
    printf("%d",j);
    while (1);
    return 0;
    }

  • 相关阅读:
    iOS多线程_06_GCD其它用法
    iOS多线程_05_线程间通信NSThread/GCD
    iOS多线程_04_GCD
    iOS多线程_03_Block
    iOS多线程_02_多线程的安全问题
    iOS多线程_01_简介和NSThread
    shell 根据端口号输出所有的pid
    【java核心36讲】接口和抽象类的区别
    CSS布局
    CSS基础
  • 原文地址:https://www.cnblogs.com/enjoyall/p/6012863.html
Copyright © 2020-2023  润新知