当前位置: 首页 > news >正文

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

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

目录

什么是双向链表?

双向链表的节点结构

双向链表的基本操作

完整的双向链表示例

总结


什么是双向链表?

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

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

    Node* initLinkedList() {Node* head = (Node*)malloc(sizeof(Node));head->prev = NULL;head->next = NULL;return head;
    }
  2. 插入节点 

    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);
}
  1. 遍历双向链表
    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;
}
总结

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

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

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

http://www.lryc.cn/news/324558.html

相关文章:

  • 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
  • 深度学习pytorch——多层感知机反向传播(持续更新)
  • 五、分布式锁-redission
  • ARM的三个按键实验
  • 高架学习笔记之需求工程
  • mysql基础2多表查询
  • Qt 写一个邮件发送程序
  • swagger3快速使用
  • 一键入门Ubuntu22!
  • 阿里云服务器价格购买价格表,2024新版报价查询
  • 实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)
  • WPF —— DataGrid数据网格
  • 牛客题霸-SQL进阶篇(刷题记录一)
  • 网络安全实训Day12
  • 对话Midjourney创始人:图片仅是起步,人工智能将全面改变学习、创意和组织。
  • Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期
  • LeetCode刷题记录——day6
  • C++String类
  • Linux docker7--私有镜像仓库registry和UI搭建及使用
  • IDS入侵检测系统分为两大类。
  • 为什么元素显示的样式跟我设置的不一样?CSS优先级详解
  • C语言动态内存的管理
  • CASIA数据集转png HWDB2.0-2.2
  • 学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)
  • 前端面试题《react》
  • 快速入门Kotlin③类与对象
  • RUST:Arc (Atomic Reference Counted) 原子引用计数
  • 从0写一个问卷调查APP的第13天-1
  • 20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
  • Python爬虫之requests库