欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表

 更新時(shí)間:2021年12月28日 09:56:26   作者:玄澈_  
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。本文將為大家詳細(xì)介紹雙向鏈表的特點(diǎn)與使用,需要的可以參考一下

雙向鏈表的儲(chǔ)存結(jié)構(gòu)示意圖

雙向鏈表的初始化結(jié)構(gòu)

1.雙向鏈表的結(jié)點(diǎn)

代碼實(shí)現(xiàn)

//雙向鏈表的結(jié)點(diǎn),包含一個(gè)數(shù)據(jù)域,兩個(gè)指針域
typedef struct DoublyNode {
	ElementType date;  //數(shù)據(jù)域
	struct DoublyNode* prev;   //指向前綴結(jié)點(diǎn)
	struct DoublyNode* next;   //指向后綴結(jié)點(diǎn)
}DoublyNode;

2.雙向鏈表的頭結(jié)點(diǎn)

//雙向鏈表
typedef struct DoublyLinkList {
	int length;
	DoublyNode* next;
};

3.總代碼

//雙向鏈表的結(jié)點(diǎn),包含一個(gè)數(shù)據(jù)域,兩個(gè)指針域
typedef struct DoublyNode {
	ElementType date;  //數(shù)據(jù)域
	struct DoublyNode* prev;   //指向前綴結(jié)點(diǎn)
	struct DoublyNode* next;   //指向后綴結(jié)點(diǎn)
}DoublyNode;
 
//雙向鏈表
typedef struct DoublyLinkList {
	int length;
	DoublyNode* next;
};

雙向鏈表中的指定文件插入元素?

1.插入的為第一個(gè)位置

代碼實(shí)現(xiàn)

2.其他位置插入

代碼實(shí)現(xiàn)

總代碼

void InsertDoublyLinkList(DoublyLinkList* dlist, int pos, ElementType element) {
	//創(chuàng)建空節(jié)點(diǎn)
	DoublyNode* node = (DoublyLinkList*)malloc(sizeof(DoublyLinkList));
	node->date = element;
	node->prev = NULL;
	node->next = NULL;
	//在第一個(gè)位置插入結(jié)點(diǎn)
	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) {
			//如果前置結(jié)點(diǎn)非空->因?yàn)榭站捅硎緵]有后繼結(jié)點(diǎn)了
			//將插入位置的前置結(jié)點(diǎn)改為指向新結(jié)點(diǎn)
			currNode->next->prev = node;
		}
		node->next = currNode->next;
		currNode->next = node;
		dlist->length++;
	}
}

雙向鏈表的刪除

1.刪除第一個(gè)元素

代碼實(shí)現(xiàn)

2.刪除其他位置元素

代碼實(shí)現(xiàn)

總代碼

void DeleteDoublyLinkList(DoublyLinkList* dlist, int pos) {
	if (pos == 1) {
		DoublyLinkList* node = dlist->next;
		if (node) {
			dlist->next;
			if (node->next) {
				//如果喲有第二個(gè)結(jié)點(diǎn),那么設(shè)置第二個(gè)結(jié)點(diǎn)的前置結(jié)點(diǎn)為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;
}
 

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)結(jié)構(gòu) 雙向鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論