您现在的位置是:首页 > 诗句大全

数据结构——双向链表(C语言版)

作者:往北时间:2024-03-26 09:15:53分类:诗句大全

简介  文章浏览阅读1k次,点赞75次,收藏49次。数据结构双向链表简单直白讲解

点击全文阅读

上一章:数据结构——单向链表(C语言版)-CSDN博客

目录

什么是双向链表?

双向链表的节点结构

双向链表的基本操作

完整的双向链表示例

总结


什么是双向链表?

双向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含两个指针:一个指向前一个节点,一个指向后一个节点。双向链表可以在任意位置高效地插入和删除节点,相比单向链表,双向链表可以双向遍历,但相应地需要更多的内存空间存储额外的指针。

双向链表的节点结构
typedef struct Node {    int data;    struct Node* prev;    struct Node* next;} Node;
双向链表的基本操作

初始化双向链表

Node* initLinkedList() { Node* head = (Node*)malloc(sizeof(Node)); head->prev = NULL; head->next = NULL; return head;}

插入节点 

void insertNode(Node* prevNode, int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data;newNode->prev = prevNode; newNode->next = prevNode->next;prevNode->next->prev = newNode; prevNode->next = newNode;}

    3.删除节点

void deleteNode(Node* delNode) {    delNode->prev->next = delNode->next;    delNode->next->prev = delNode->prev;    free(delNode);}
遍历双向链表
void printLinkedList(Node* head) { Node* current = head->next; while (current != NULL) {     printf("%d ", current->data);     current = current->next; } printf("\\n");}
完整的双向链表示例
#include <stdio.h>#include <stdlib.h>typedef struct Node {    int data;    struct Node* prev;    struct Node* next;} Node;Node* initLinkedList() {    Node* head = (Node*)malloc(sizeof(Node));    head->prev = NULL;    head->next = NULL;    return head;}void insertNode(Node* prevNode, int data) {    Node* newNode = (Node*)malloc(sizeof(Node));    newNode->data = data;        newNode->prev = prevNode;    newNode->next = prevNode->next;        prevNode->next->prev = newNode;    prevNode->next = newNode;}void deleteNode(Node* delNode) {    delNode->prev->next = delNode->next;    delNode->next->prev = delNode->prev;    free(delNode);}void printLinkedList(Node* head) {    Node* current = head->next;    while (current != NULL) {        printf("%d ", current->data);        current = current->next;    }    printf("\\n");}int main() {    Node* head = initLinkedList();        insertNode(head, 1);    insertNode(head->next, 2);    insertNode(head->next->next, 3);        printLinkedList(head);        deleteNode(head->next);        printLinkedList(head);        return 0;}
总结

通过上述代码示例,我们实现了双向链表的基本操作,包括初始化、插入和删除节点,以及遍历链表。双向链表是一种灵活且高效的数据结构,适用于需要频繁插入和删除操作的场景。通过深入理解双向链表的实现原理,我们可以更好地应用它解决实际问题。

由以上内容我们其实就可以看到在应用与理解层面,双向链表相较于单向链表有很大的优势,但在具体应用中还需要我们实际情况实际判断。

感谢观看,还请各位大佬点赞支持以下!!!

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句