栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【数据结构与算法】—— * 双向链表 *

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构与算法】—— * 双向链表 *


双向链表的储存结构示意图


 双向链表的初始化结构 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;
}


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号