C++로 큐 클래스를 만들고 프론트 함수를 작동시키는 데 문제가 있습니다. 대기열의 첫 번째 노드 값을 인쇄합니다. 내 queue.cpp 클래스는 여기이상한 함수 동작 C++, 같은 대답을 반환하지 않습니다.
#include "queue.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
queue::queue()
{
front_p = NULL;
back_p = NULL;
current_size = 0;
}
void queue::enqueue(int item)
{
node newnode = node(item, NULL);
if (front_p == NULL) //queue is empty
{
front_p = &newnode;
back_p = &newnode;
}
else
{
back_p->next = &newnode;
back_p = &newnode;
}
current_size ++;
}
int queue::dequeue()
{
//if there is only one node
if (front_p == back_p)
{
front_p = NULL;
back_p = NULL;
}
//if there are two or more
else
front_p = front_p->next;
current_size --;
}
int queue::front()
{
if (front_p != NULL)
return (*front_p).data;
}
bool queue::empty()
{
if (front_p == NULL && back_p == NULL)
return true;
else
return false;
}
int queue::size()
{
return current_size;
}
내 헤더 파일 (queue.h)은 여기
class queue
{
public:
queue(); // constructor - constructs a new empty queue.
void enqueue(int item); // enqueues item.
int dequeue(); // dequeues the front item.
int front(); // returns the front item without dequeuing it.
bool empty(); // true iff the queue contains no items.
int size(); // the current number of items in the queue.
int remove(int item); // removes all occurrances of item
// from the queue, returning the number removed.
private:
class node // node type for the linked list
{
public:
node(int new_data, node * next_node){
data = new_data ;
next = next_node ;
}
int data ;
node * next ;
};
node* front_p ;
node* back_p ;
int current_size ; // current number of elements in the queue.
};
테스트 프로그램 (tester.cpp)
#include <iostream>
#include "queue.h"
#include <stdlib.h>
using namespace std;
int main(int argc, char * const argv[])
{
queue q1;
q1.enqueue(5);
cout << "front: " << q1.front() << endl;
cout << "front: " << q1.front() << endl;
cout << "front: " << q1.front() << endl;
q1.enqueue(10);
cout << "front: " << q1.front() << endl;
cout << "front: " << q1.front() << endl;
cout << "size: " << q1.size() << endl;
}
메이크입니다
all: tester
tester: queue.o tester.o
g++ tester.o queue.o -o tester
tester.o: tester.cpp
g++ -c tester.cpp
queue.o: queue.cpp queue.h
g++ -c queue.cpp
clean:
rm -f tester *.o
테스트 프로그램을 실행할 때 다음과 같이 나타납니다.
front: 5
front: 6299744
front: 6299744
front: 10
front: 6299744
size: 2
첫 번째 대기열에 넣은 후, 앞면은 대기열 앞면의 값을 반환합니다. 그러나 그 후 그것은 이상한 숫자를 반환하고 어디에서 왔는지 전혀 모른다! 그런 다음 다시 대기열에 넣으면 다시 인쇄됩니다. 앞면을 두 번 호출 한 후에 만 엉망인 값을 인쇄하기 시작합니다. 아무도 나에게 무슨 일이 벌어지고 있는지 이해할 수 있습니까? 소유하지 않은 당신은 메모리에 대한 포인터를 가지고 있기 때문에
모든 기능을 확인하고 반품을 사용하지 않는 사람은 약간의 도움이 필요할 수 있습니다. –