Java数据结构与算法学习之双向链表 目录 双向链表的储存结构示意图 双向链表的初始化结构 1.双向链表的结点 2.双向链表的头结点 3.总代码 双向链表中的指定文件插入元素 1.插入的为第一个位置 2.其他位置插入 总代码 双向链表的删除 1.删除第
目录
- 双向链表的储存结构示意图
- 双向链表的初始化结构
- 1.双向链表的结点
- 2.双向链表的头结点
- 3.总代码
- 双向链表中的指定文件插入元素
- 1.插入的为第一个位置
- 2.其他位置插入
- 总代码
- 双向链表的删除
- 1.删除第一个元素
- 2.删除其他位置元素
- 总代码
双向链表的储存结构示意图
双向链表的初始化结构
1.双向链表的结点
代码实现
//双向链表的结点,包含一个数据域,两个指针域
typedef struct DoublyNode {
ElementType date; //数据域
struct DoublyNode* prev; //指向前缀结点
struct DoublyNode* next; //指向后缀结点
}DoublyNode;
2.双向链表的头结点
//双向链表
typedef struct DoublyLinkList {
int length;
DoublyNode* next;
};
3.总代码
//双向链表的结点,包含一个数据域,两个指针域
typedef struct DoublyNode {
ElementType date; //数据域
struct DoublyNode* prev; //指向前缀结点
struct DoublyNode* next; //指向后缀结点
}DoublyNode;
//双向链表
typedef struct DoublyLinkList {
int length;
DoublyNode* next;
};
双向链表中的指定文件插入元素
1.插入的为第一个位置
代码实现
2.其他位置插入
代码实现
总代码
void InsertDoublyLinkList(DoublyLinkList* dlist, int pos, ElementType element) {
//创建空节点
DoublyNode* node = (DoublyLinkList*)malloc(sizeof(DoublyLinkList));
node->date = element;
node->prev = NULL;
node->next = NULL;
//在第一个位置插入结点
if (pos == 1) {
node->next = dlist->next;
dlist->next = node;
node->next->prev = node;
dlist->length++;
return;
}
DoublyLinkList* currNode = dlist->next;
for (int i = 1; currNode && i < pos - 1; i++) {
currNode = currNode->next;
}
if (currNode) {
node->prev = currNode;
if (currNode->next) {
//如果前置结点非空->因为空就表示没有后继结点了
//将插入位置的前置结点改为指向新结点
currNode->next->prev = node;
}
node->next = currNode->next;
currNode->next = node;
dlist->length++;
}
}
双向链表的删除
1.删除第一个元素
代码实现
2.删除其他位置元素
代码实现
总代码
void DeleteDoublyLinkList(DoublyLinkList* dlist, int pos) {
if (pos == 1) {
DoublyLinkList* node = dlist->next;
if (node) {
dlist->next;
if (node->next) {
//如果哟有第二个结点,那么设置第二个结点的前置结点为NULL
node->next->prev = NULL;
}
free(node);
dlist->length--;
}
return;
}
DoublyLinkList* node = dlist->next;
for (int i = 1; i < pos; i++) {
node = node->next;
}
if (node) {
if (node->next) {
node->next->prev = node->prve;
}
node->prev->next = node->next;
free(node);
dlist->length--;
}
return;
}
到此这篇关于Java数据结构与算法学习之双向链表的文章就介绍到这了,更多相关Java数据结构 双向链表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
织梦狗教程
本文标题为:Java数据结构与算法学习之双向链表


基础教程推荐
猜你喜欢
- Java File类的概述及常用方法使用详解 2023-05-18
- JVM分析之类加载机制详解 2023-04-06
- 全局记录Feign的请求和响应日志方式 2023-01-09
- Project Reactor源码解析publishOn使用示例 2023-04-12
- 用java实现扫雷游戏 2022-12-06
- SpringBoot配置文件中密码属性加密的实现 2023-03-11
- Java去掉小数点后面无效0的方案与建议 2023-02-18
- 一文了解Java 线程池的正确使用姿势 2023-06-17
- 工厂方法在Spring框架中的运用 2023-06-23
- Java使用EasyExcel进行单元格合并的问题详解 2023-01-18