zoukankan      html  css  js  c++  java
  • 数据结构之队列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;
    }

  • 相关阅读:
    sql server 2008数据复制方法
    排错技能:任务管理器中追踪某w3wp.exe是哪个IIS站点的application pool
    SplendidCRM中给来自EditView中的listbox控件设置选中值或数据源
    jQuery String Functions
    [转]jquery getJSON 数据联动(采用序列化和反序列化获取数据) .
    [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
    深入理解C语言
    Qt回忆录之配置开发环境
    360电话面试
    浅谈C++设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/enjoyall/p/6012863.html
Copyright © 2011-2022 走看看