레포지토리 파기 귀찮아서 그냥 코드 복붙해서 올림


큐, 원형큐 구현한 코드임


//헤더 파일

#ifndef QueueArray_h

#define QueueArray_h


#include <iostream>


namespace que{ 

    template <typename T>

    class queue{

    protected:

        T *q;

        int size,rear,front;


    public:

        queue(int n);

        int is_empty();

        int is_full();

        void insert(T item);

        int del();

        void print();

        ~queue();

    };


    template <typename T>

    class cqueue: public queue<T>{

    public:

        cqueue(int n);

        int is_full();

        void insert(T item);

        int del();

        void print();

        ~cqueue(){};

    };

}


#endif


-----------------------------------------------------------------------

//소스 코드

#include "QueueArray.h"


template <typename T>

que::queue<T>::queue(int n):

size(n),q(new T[n]),front(-1),rear(-1){}


template <typename T>

int que::queue<T>::is_empty(){

    if(rear==front){

        return 1;

    }

    else{

        return 0;

    }

}


template <typename T>

int que::queue<T>::is_full(){

    if(rear>=size-1){

        return 1;

    }

    else{

        return 0;

    }

}


template <typename T>

void que::queue<T>::insert(T item){

    if(is_full()){

        return;

    }

    q[++rear]=item;

}


template <typename T>

int que::queue<T>::del(){

    if(rear==front){

        return is_empty();

    }

    return q[++front];//front값이 (첫 원소 위치-1)

}


template <typename T>

void que::queue<T>::print(){

    std::cout<<"current queue: ";


    for(int j=front+1;j<=rear;j++){

        std::cout<<q[j]<<" ";

    }

    std::cout<<std::endl;

}


template <typename T>

que::queue<T>::~queue(){

    delete[] q;

}


template <typename T>

que::cqueue<T>::cqueue(int n):queue<T>(n){

    this->size=n+1;

    this->front=0;

    this->rear=0;

}


template <typename T>

int que::cqueue<T>::is_full(){

    if((this->rear+1)%this->size==this->front){

        return 1;

    }

    else{

        return 0;

    }

}


template <typename T>

void que::cqueue<T>::insert(T item){

    if(is_full()){

        return;

    }

    this->q[(++this->rear)%this->size]=item;

}


template <typename T>

int que::cqueue<T>::del(){

    if(this->rear==this->front){

        return this->is_empty();

    }

    return this->q[(++this->front)%this->size];

}


template <typename T>

void que::cqueue<T>::print(){

    std::cout<<"current queue: ";


    for(int j=this->front+1;j<=this->rear;j++){

        std::cout<<this->q[j%this->size]<<" ";

    }

    std::cout<<std::endl;

}




c++이랑 자료구조 배운지 얼마 안돼서 코드 좆같아도 이해좀