欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java数据结构与算法学习之双向链表

时间:2022-11-09 09:12:06|栏目:JAVA代码|点击:

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

双向链表的初始化结构

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;
}
 

上一篇:Spring Cloud @EnableFeignClients注解的属性字段basePacka详解

栏    目:JAVA代码

下一篇:在Android系统中解析XML文件的方法

本文标题:Java数据结构与算法学习之双向链表

本文地址:http://www.codeinn.net/misctech/218529.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有