zoukankan      html  css  js  c++  java
  • 循环队列

    数据结构作业 之 循环队列的实现

    主要思路:

    • 设置标志法: 设置一个bool型的judge标记,初始化为false;
    • 如果入队列成功,judge为true,如果出队列成功,judge设为false
    • 判空条件是front%Maxsize == rear%Maxsize && judge == 0
    • 判满条件是front%Maxsize == rear%Maxsize && judge == 1

    代码实现:

    //循环队列
    #include <iostream>
    using namespace std;
    const int defaultMaxSize = 10;
    
    template <class T>
    class SeqQueue
    {
    private:
        int Front;
        int Rear;
        int maxSize;
        T * element;
        bool tag;
    public:
        SeqQueue(int sz = defaultMaxSize):Front(0),Rear(0),maxSize(sz)
        {
            element = new T[maxSize];
            tag = false;
        }
        ~SeqQueue()
        {
            delete[] element;
            Front = 0;
            Rear = 0;
        }
        bool EnQueue(const T&x)//新的元素x入队列
        {
            //如果队列已经满了
            if(Front%maxSize == Rear%maxSize && tag == true)
            {
                return false;
            }
            element[Rear] = x;
            Rear = (Rear+1)%maxSize;
            tag = true;
            return true;
        }
        bool DeQueue(T&x)//队头元素出队列
        {
            //如果队列是空的
            if(Front%maxSize == Rear%maxSize && tag == false)
            {
                return false;
            }
            x = element[Front];
            Front = (Front+1)%maxSize;
            tag = false;
            return true;
        }
        //重载进行输出
        friend ostream&operator << (ostream&os,SeqQueue<T>&Q)
        {
            os << "front = " << Q.Front << " Rear = " << Q.Rear << endl;
            bool judge = Q.tag;
            for(int i = Q.Front; i != Q.Rear || judge ; i = (i+1)%Q.maxSize)
            {
                os << i << ":" << Q.element[i] << " ";
                if(i == Q.Front)
                {
                    judge = false;
                }
            }
            return os;
        }
    };
    int main()
    {
        int sz;
        cin >> sz;
        SeqQueue<int> sq(sz);
        for(int i = 0 ; i < sz; i++)
            sq.EnQueue(i+1);
        cout << sq << endl;
        for(int i = 0 ; i < sz/2; i++)
        {
            int x;
            sq.DeQueue(x);
            cout << x << " ";
        }
        cout << endl;
    
        cout << sq << endl;
        for(int i = 0 ; i < sz/2; i++)
        {
            sq.EnQueue(i+sz/2);
        }
        cout << sq << endl;
        return 0;
    }
    
    

    感觉输出函数重载那块不大好写,花了一点时间

  • 相关阅读:
    STM32 端口复用配置
    stm32 新建文件记得添加到工程
    keil解决SYSTEMsysstm32f10x.h(298): error: #67: expected a "}"
    解决Keil复制中文乱码
    STM32 MPU6050 源码
    STM32 PWM输出
    STM32定时器
    STM32 看门狗操作姿势
    开课博客
    第二周学习进度
  • 原文地址:https://www.cnblogs.com/pprp/p/7670170.html
Copyright © 2011-2022 走看看