C++实现链表数据结构
前言
在数据结构课程中,链表是一种非常基础且重要的数据结构。链表允许动态地进行内存分配,因此相比数组具有更高的灵活性。本文将介绍如何使用C++实现一个单链表,并展示其基本操作,如插入、删除和遍历。
单链表节点结构
首先,我们需要定义链表的节点结构。每个节点包含一个数据域和一个指向下一个节点的指针。
cpp
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
单链表类
接下来,我们定义一个单链表类,包含头节点指针和基本的链表操作。
cpp
class LinkedList {
private:
Node* head;
public:
LinkedList() : head(nullptr) {}
~LinkedList() {
Node* current = head;
Node* nextNode;
while (current != nullptr) {
nextNode = current->next;
delete current;
current = nextNode;
}
}
// 在链表末尾插入新节点
void append(int value) {
Node* newNode = new Node(value);
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除值为value的第一个节点
bool remove(int value) {
if (head == nullptr) return false;
if (head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return true;
}
Node* temp = head;
while (temp->next != nullptr && temp->next->data != value) {
temp = temp->next;
}
if (temp->next == nullptr) return false;
Node* nodeToDelete = temp->next;
temp->next = temp->next->next;
delete nodeToDelete;
return true;
}
// 打印链表中的所有元素
void printList() const {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
};
使用示例
下面是一个简单的使用示例,展示如何创建链表、插入节点、删除节点和打印链表。
cpp
int main() {
LinkedList list;
list.append(1);
list.append(2);
list.append(3);
list.printList(); // 输出: 1 2 3
list.remove(2);
list.printList(); // 输出: 1 3
return 0;
}
总结
本文介绍了如何使用C++实现一个单链表数据结构,并展示了其基本操作。链表是数据结构中的基础,理解链表的实现和操作对于学习更复杂的数据结构非常有帮助。希望这篇文章能帮助你更好地理解和掌握链表。