引自免费微信小程序:皆我百晓生
在C语言中实现双向链表的基本操作涉及几个关键步骤,包括定义结构体、定义链表类、定义数据成员和辅助函数等。以下是针对这些步骤的具体步骤:
- 定义结构体:
typedef struct Node {
int data;
Node* prev;
Node* next;
} Node;
在这个例子中,我们定义了一个名为Node的结构体,包含三个成员:data表示节点的数据(整型类型),prev指向前一个节点(指向下一个节点的指针)和next指向上一个节点的指针(指向当前节点的指针)。
- 定义链表类:
class DoublyLinkedList {
public:
DoublyLinkedList() {}
// 插入新节点
void insert(int data) {
Node* newNode = new Node(data);
if (head == nullptr) {
head = newNode;
tail = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}
// 删除指定节点
void deleteNode(int data) {
if (head == nullptr) {
return;
}
if (head->data == data) {
head = head->prev;
deleteHead();
} else if (head->data < data) {
head->prev->next = head->next;
} else {
head->next->prev = head->prev;
}
}
private:
Node* head; // 链表头节点
Node* tail; // 链表尾节点
};
在这个类中,有两个私有成员变量:head表示链表的头节点,tail表示链表的尾节点。我们还定义了两个公共成员函数:insert用于向链表末尾添加新的节点,以及deleteNode用于从链表头部删除指定的节点。
- 定义辅助函数:
void printList(DoublyLinkedList* list) {
if (list == nullptr) {
return;
}
Node* current = list->head;
while (current != nullptr) {
printf("Data: %d\n", current->data);
current = current->next;
}
}
这个辅助函数遍历整个链表并打印每个节点的数据值。
- 编译链表类及实现:
int main() {
DoublyLinkedList list;
// 实例化链表
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
// 打印链表
printList(&list);
// 删除节点
list.deleteNode(3);
// 打印链表
printList(&list);
return 0;
}
这段代码首先实例化一个双向链表,然后向其中添加四个节点,并打印出链表内容。接着,它从链表中删除节点(即第四个节点),再次打印链表内容。最后,程序结束,输出只有三个节点的链表内容。
以上就是对双向链表基本操作的C语言实现。如果你有任何其他关于链表相关的问题或需要进一步解释某个特定的操作,欢迎提出!
