클래스 배열선언 사이즈
조회수 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 까지 입니다.
front
와rear
가 동일한지로 큐가 비어있는지를 확인한다면 해당 큐는 최대 4개의 원소를 가질 수 있겠네요.값이 큐에 6개 들어가면 문제가 생기긴 하지만 7개 이상 들어가지는 않을 것 같은데 어떤 순서로 값을 넣으신건가요? 혹은 어떤 것을 보고 7개 이상 들어 갔다고 판단하신건가요?
그리고 코드를 보니 링큐 같은데 구현이 잘못된 것 같습니다.
아래 처럼
rear
와front
가 범위를 넘어서는 경우에 대한 처리를 추가해 야할 것 같습니다.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]); } }
댓글 입력