我必须编写链表,然后将其转换为动态堆栈,然后将其转换为动态队列。好吧一切似乎都工作,除了“dequeuing”,正如程序即将完成,它给了我一个错误:“LinkedList_Stack_BNS11.exe [4972]发生了未处理的win32异常。”。
我只是假设它是出列的,因为当我单步执行和/或运行程序时,它会一直运行到那个部分,所以也许我发送了一个指针错误或什么?
输出:
获取5件物品.... // Finsihes
队列中的值是(Dequeuing):
0
1
2
//在队中纠正数字,但......
//程序在这里给出了错误。什么时候应该完成并关闭。
如果我包含太多代码,请告诉我,我会将其删除为“Dequeuing”(这是以下所有内容的中间部分)
预先感谢您的帮助!!我只是没有看到我做错了什么。认为它可能与“头”指向的位置有关? IDK。
标题文件:
class NumberList
{
private:
//
struct ListNode
{
int value; // Value in this node
struct ListNode *next; // Pointer to the next node
};
ListNode *head; // List head pointer
ListNode *rear;
public:
//Constructor
NumberList()
{ head = NULL; rear = NULL; }
//Destructor
~NumberList();
//Stack operations
bool isEmpty();
//Queue operations
void enqueue(int);
void dequeue(int &);
};
#endif
List_Stack_Queue.cpp:
bool NumberList::isEmpty()
{
bool status;
if(!head)
status = true;
else
status = false;
return status;
}
void NumberList::enqueue(int num)
{
ListNode *newNode; // Point to a new node
// Allocate a new node and store num there.
newNode = new ListNode;
newNode->value = num;
//If there are no nodes in the list
// make newNode the first node.
if(isEmpty())
{
head = newNode;
rear = head;
//newNode->next = NULL;
}
else
{
rear->next = newNode;
rear = rear->next;
//newNode->next = head;
//head = newNode;
}
}
void NumberList::dequeue(int &num)
{
ListNode *temp;
if(isEmpty())
cout << "The queue is empty.\n";
else
{
num = head->value;
temp = head;
head = head->next;
delete temp;
}
}
主要
const int MAX_VALUES = 3;
// Create a DynIntQueue object.
NumberList iQueue;
// Enqueue a series of numbers.
cout << "Enqueuing " << MAX_VALUES << " items...\n";
for (int x = 0; x < MAX_VALUES; x++)
iQueue.enqueue(x);
cout << endl;
//Dequeue and retrieve all numbers in the queue
cout << "The values in the queue were (Dequeuing):\n";
while(!iQueue.isEmpty())
{
int value;
iQueue.dequeue(value);
cout << value << endl;
}
return 0;
答案 0 :(得分:2)
最后一个节点的下一个元素应该在链表中设置为 NULL 。所以,
void NumberList::enqueue(int num)
{
// ...
if(isEmpty())
{
head = newNode;
head->next = NULL;
rear = head;
}
else
{
rear->next = newNode;
rear = rear->next;
rear->next = NULL; // Pointing the next node element to null.
}
}
对我而言,Numberlist::isEmpty();
成员函数似乎有些问题。你如何判断列表是否为空?显示它的定义。