【发布时间】:2020-04-01 19:50:25
【问题描述】:
我正在学习队列,我正在努力使用链表来实现这个实现。下面在我的代码中,我试图实现入队和出队方法,但是当我实现这些方法时,我的链接列表无法更新。我觉得这可能与我的指针有关。任何建议或帮助将不胜感激。
#include <iostream>
using namespace std;
// A linked list node
class Node
{
public:
int data;
Node *next;
Node()
{
data = 0;
next = nullptr;
}
Node(int data)
{
this->data = data;
next = nullptr;
}
};
class List
{
public:
struct Node* head;
struct Node* tail;
List()
{
head = tail = nullptr;
}
};
void ListPrint(List *list)
{
Node *tempNode = list->head;
while(tempNode != nullptr){
cout<<tempNode->data<<",";
tempNode = tempNode->next;
}
}
void ListAppend(List *list, Node *newNode)
{
if(list->head == nullptr)
{
list->head = newNode;
list->tail = newNode;
}
else{
list->tail->next = newNode;
list->tail = newNode;
}
}
void ListRemoveAfter(List *list, Node *curNode) {
// Special case, remove head
Node *sucNode;
if (curNode == nullptr && list->head != nullptr) {
sucNode = list->head->next;
//delete(list->head);
list->head = sucNode;
if (sucNode == nullptr) { // Removed last item
list->tail = nullptr;
}
}
else if (curNode->next != nullptr) {
sucNode = curNode->next->next;
//delete(curNode->next);
curNode->next = sucNode;
if (sucNode == nullptr) { // Removed tail
list->tail = curNode;
}
}
}
void enqueue(List *queue, Node *newItem)
{
ListAppend(queue, newItem);
ListPrint(queue);
}
Node dequeue(List *queue)
{
Node poppedItem = queue->head-> data;
ListRemoveAfter(queue, nullptr);
return poppedItem;
}
void isEmpty(List *queue)
{
}
int main() {
List *myQueue= new List;
int data;
char input;
do
{
cout<<"\nCurrent Queue: ";
ListPrint(myQueue);
cout<<endl;
cout<<"\nEnter Queue operation: ";
cout<<"Enqueue(e), dequeue(d), quit(q): ";
cin>>input;
switch(input)
{
case 'e':
cout<<"enter data to enqueue: ";
cin>>data;
enqueue(myQueue, new Node(data));
break;
case 'd':
if(!isEmpty(myQueue)){
Node* poppedItem = dequeue(myQueue);
cout<<"Dequeued: "<<poppedItem->data;
delete(poppedItem);
}
else
cout<<"Queue Empty";
break;
}
}while(input != 'q');
}
【问题讨论】:
-
这是您的实际代码吗?它无法编译。
-
这段代码无法编译,dequeu 也返回数据而不是指针。
标签: c++ node.js linked-list queue