클래스 배열선언 사이즈

조회수 544회

저가 배열을 이용한 큐를 선언했는데 제 생각에는 element의 사이즈가 5니까 총 6개의 엘리멘트가 들어 갈 수 있다고 생각하는데 배열에 6개 넘게 사이즈가 들어가더라고요 왜 그렇죠?

#include <iostream>
using namespace std;

class queue {
public:
    int front;
    int rear;
    int size;
    int element[5];

public:
    queue() :front(0), rear(0), size(0) { }
    void enqueue(int);
    void dequeue();
    bool empty();
    bool full();
    void print();
};

void queue::enqueue(int value) {
    if (!full()) {
        cout << "Front Rear" << front << " " << rear << endl;
        element[rear] = value;
        rear++;
        size++;
    }
}

void queue::dequeue() {
    if (!empty()) {
        element[front] = 0;
        front++;
        size--;
    }
    else {
        cout << "No Data" << endl;
    }
}

bool queue::empty() {
    if (front == rear) {
        return true;
    }
    else {
        return false;
    }
}

bool queue::full() {
    if (size == 5+1) {
        return true;
    }
    else {
        return false;
    }
}

void queue::print() {
    for (int i = front; i < rear; i++) {
        cout << element[i] << endl;
    }
}

int main() {
    queue q;
    int com, val;
    for (int i = 0; i < 15;i++) {
        cout << "-----------------------------------------" << endl;
        cout << "1. Enqueue // 2.Dequeue // 3. print" << endl;
        cout << "-----------------------------------------" << endl;
        cin >> com;
        if (com == 1) {
            cin >> val;
            q.enqueue(val);
        }
        if (com == 2) {
            q.dequeue();
        }
        if (com == 3) {
            q.print();
        }
    }
}

1 답변

  • 배열 크기가 5면 5개의 원소가 들어가고 인덱스의 범위가 0~4 까지 입니다. frontrear가 동일한지로 큐가 비어있는지를 확인한다면 해당 큐는 최대 4개의 원소를 가질 수 있겠네요.

    값이 큐에 6개 들어가면 문제가 생기긴 하지만 7개 이상 들어가지는 않을 것 같은데 어떤 순서로 값을 넣으신건가요? 혹은 어떤 것을 보고 7개 이상 들어 갔다고 판단하신건가요?

    그리고 코드를 보니 링큐 같은데 구현이 잘못된 것 같습니다.

    아래 처럼 rearfront가 범위를 넘어서는 경우에 대한 처리를 추가해 야할 것 같습니다.

    void queue::enqueue(int value) {
        if (!full()) {
            cout << "Front Rear" << front << " " << rear << endl;
            element[rear] = value;
            rear++;
            rear %= sizeof(element) / sizeof(element[0]);
            size++;
        }
    }
    
    void queue::dequeue() {
        if (!empty()) {
            element[front] = 0;
            front++;
            front %= sizeof(element) / sizeof(element[0]);
            size--;
        }
        else {
            cout << "No Data" << endl;
        }
    }
    
    bool queue::empty() {
        return front == rear;
    }
    
    bool queue::full() {
        int next = rear + 1;
        next %= sizeof(element) / sizeof(element[0]);
        return next == front;
    }
    
    void queue::print() {
        int i = front;
        while (i != rear) {
            cout << element[i] << endl;
            ++i;
            i %= sizeof(element) / sizeof(element[0]);
        }
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)