2013-08-14 6 views
0

큐에 대해 배우고 있으며 큐를 선형 배열 (순환 배열이 아님)로 구현하는 다음 프로그램을 작성했습니다.배열 구현 큐 : 이상한 출력

#include<iostream> 
using namespace std; 

class queue { 
    int front, max_queue, rear, count = 0; 
    int *items; 
public: 
    queue(int); 
    ~queue(); 
    void enqueue(int); 
    void dequeue(); 
    bool isEmpty(); 
    int size(); 
    void display(); 
}; 

queue::~queue() { 
    delete []items; 
} 

queue::queue(int max) { 
    front = -1; 
    rear = -1; 
    max_queue = max; 

    items = new int[max_queue]; 
} 

void queue::enqueue(int n) { 
    if (count == max_queue) 
     cout << "queue is full, no enqueue possible"; 
    else { 
     items[++rear] = n; 
     count++; 
    } 
} 

void queue::dequeue() { 
    if (count == 0) 
     cout << "no dequeue possible, queue already empty"; 
    else { 
     front--; 
     count--; 
    } 
} 

bool queue::isEmpty() { 
    return ((count == 0) ? 1 : 0); 
} 

int queue::size() { 
    return count; 
} 

void queue::display() { 
    if (count == 0) 
     cout << "nothing to display"; 
    else { 
     for (int i = front; i <= rear;) 
      cout << items[i++] << endl; 
    } 

} 

int main() { 

    queue *qe = new queue(10); 

    qe->enqueue(1); 
    qe->enqueue(2); 
    qe->enqueue(3); 
    qe->enqueue(4); 
    qe->display(); 


    return 0; 
} 

나는 다음과 같은 출력

49 
1 
2 
3 
4 

RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms 

왜 내 출력 49가 얻을.? 쓰레기 값입니까? 원형 배열 구현을 사용하지 않았을 가능성이 있습니까? 나는 잘 모른다. 어떤 도움을 주셔서 감사합니다.

답변

3

front이 -1 인 디스플레이 루프 i를 시작합니다. 대기열 앞에있는 지점을 가리키고 있습니다. 당신은 i=front 설정하는

for (int i = front; i <= rear;) 
    cout << items[i++] << endl; 

,하지만 당신은 이전에 front=-1을 설정 한 :

+0

그러나 큐가 비어있을 때만 앞에 -1이되지 않습니까? count! = 0이면 0이나 그 이상의 높은 값과 같지 않아야합니까? – fts

+0

'당신의'enqueue' 함수는 앞쪽으로 업데이트되지 않습니다. – mark

0

문제는 display 기능입니다. 따라서 items[-1]에 액세스하려고합니다.

for (int i = front + 1; i <= rear;) 
    cout << items[i++] << endl; 

또는 i<rear 때까지 계속 ++i 대신 i++ 사용 : 당신은 i=front+1을 설정할 수 있습니다

for (int i = front; i < rear;) 
    cout << items[++i] << endl; 
1

큐가 비어있는 경우를 당신이 요소 x을 대기열에, 다음 x는 전면과 양쪽된다 후면.