(1)记住,在初始化链表节点的时候,一定把value和next全部初始化,不然在遍历的时候容易出错。
(2)此处的犯错是在:因为没有将链表的next初始化为nullptr, 导致在遍历现实的时候出现问题,最后一个元素的依然存在,但是next指向了不明的地方。
Queue.h
#pragma once
typedef int elementType;
struct Node
{
elementType value;
struct Node* next;
};
typedef struct Q_Node
{
Node* front;
Node* rear;
}S_Queue;
class Queue
{
private:
S_Queue* PtrQ;
public:
Queue();
~Queue();
elementType Delete();
void Insert(elementType value_);
void display();
};
Queue.cpp
#include "Queue.h"
#include <iostream>
Queue::Queue()
{
PtrQ = new S_Queue;
if (PtrQ)
{
PtrQ->front = PtrQ->rear = nullptr;
}
}
Queue::~Queue()
{
Node* temp = nullptr;
while (PtrQ->front)
{
temp = PtrQ->front;
PtrQ->front = PtrQ->front->next;
delete temp;
}
delete PtrQ;
PtrQ = nullptr;
}
elementType Queue::Delete()
{
struct Node* temp = nullptr;
elementType tempData = 0;
if (PtrQ->front == nullptr)
{
std::cout << "队列为空\n";
return -1;
}
temp = PtrQ->front;
if (PtrQ->front == PtrQ->rear) // 队列只有一个元素,删除后队列置为空
{
PtrQ->front = PtrQ->rear = nullptr;
}
else
{
PtrQ->front = PtrQ->front->next;
}
tempData = temp->value;
delete temp;
return tempData;
}
void Queue::Insert(elementType value_)
{
Node* tempNode = new Node;
if (tempNode)
{
tempNode->value = value_;
tempNode->next = nullptr;
}
// 如果是第一个;
if (PtrQ->front == nullptr)
{
tempNode->next = PtrQ->front;
PtrQ->front = PtrQ->rear = tempNode;
}
// 如果不是第一个,那么在rear后插入数据;
else
{
PtrQ->rear->next = tempNode;
PtrQ->rear = tempNode;
}
}
void Queue::display()
{
Node* temp = PtrQ->front;
while (temp)
{
std::cout << temp->value << " ";
temp = temp->next;
}
}