在C++中如何实现一个双向链表,并通过代码示例展示插入和删除操作?
时间: 2024-12-02 17:24:59 浏览: 27
双向链表是数据结构中的一种,它允许从两个方向遍历,即从头部到尾部或从尾部到头部。在《C++编程:包含数据结构的程序设计(第五版)》一书中,D.S. Malik教授深入讲解了双向链表的实现细节及其操作方法。为了实现双向链表并进行基本操作,首先需要定义一个节点结构体,然后定义双向链表类,并在其内部实现相应的成员函数。
参考资源链接:[C++编程:包含数据结构的程序设计(第五版)](https://wenku.csdn.net/doc/6401ac43cce7214c316eb35a?spm=1055.2569.3001.10343)
下面是一个简单的双向链表节点和双向链表类的实现,包括插入和删除操作的代码示例:
```cpp
struct Node {
int data;
Node* prev;
Node* next;
Node(int d) : data(d), prev(nullptr), next(nullptr) {}
};
class DoublyLinkedList {
private:
Node* head;
public:
DoublyLinkedList() : head(nullptr) {}
// 插入操作
void insert(int data) {
Node* newNode = new Node(data);
if (head == nullptr) {
head = newNode;
return;
}
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
// 删除操作
void deleteNode(int data) {
if (head == nullptr) return;
Node* temp = head;
while (temp != nullptr) {
if (temp->data == data) {
if (temp->prev != nullptr) {
temp->prev->next = temp->next;
}
if (temp->next != nullptr) {
temp->next->prev = temp->prev;
}
if (temp == head) {
head = temp->next;
}
delete temp;
return;
}
temp = temp->next;
}
}
// 其他成员函数和操作...
};
```
在这个例子中,双向链表类`DoublyLinkedList`被创建,其中包含了插入和删除节点的基本操作。插入操作首先创建一个新节点,然后将其附加到链表的末尾。删除操作则遍历链表,找到指定数据的节点并进行删除,同时确保链表的连续性和正确性。
通过阅读《C++编程:包含数据结构的程序设计(第五版)》,你可以获得对双向链表深入的理解,并通过书中提供的丰富实例和编程练习,进一步提高你的编程技能和解决实际问题的能力。
参考资源链接:[C++编程:包含数据结构的程序设计(第五版)](https://wenku.csdn.net/doc/6401ac43cce7214c316eb35a?spm=1055.2569.3001.10343)
阅读全文