大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 雙向循環(huán)鏈表的介紹

雙向循環(huán)鏈表的介紹

更新時間:2022-11-02 09:09:53 來源:動力節(jié)點 瀏覽1272次

1.什么是雙向鏈表?雙向循環(huán)鏈表?

(1)雙向鏈表指的是構(gòu)成鏈表的每個結(jié)點中設(shè)立兩個指針域:一個指向其直接前驅(qū)的指針域prev,一個指向其直接后繼的指針域next。這樣形成的鏈表中有兩個方向不同的鏈,故稱為雙向鏈表。

(2)雙向循環(huán)鏈表將雙向鏈表的頭結(jié)點和尾結(jié)點鏈接起來也能構(gòu)成循環(huán)鏈表,其稱為雙向循環(huán)鏈表。

2.雙向循環(huán)鏈表的實現(xiàn)

(1)結(jié)構(gòu)

typedef int LTDataType;
typedef struct ListNode
{
	struct ListNode* next;
	struct ListNode* prev;
	int data;
}ListNode;

(2)創(chuàng)建新鏈表

ListNode* BuyListNode(LTDataType x)//建立新節(jié)點
{
	ListNode* node = (struct ListNode*)malloc(sizeof(ListNode));
	node->next = NULL;
	node->prev = NULL;
	return node;
}

(3)初始化

void ListInit()//初始化
{
	ListNode* phead = BuyListNode(0);
	phead->next = phead;
	phead->prev = phead;
	return phead;
}

(4)尾插

void ListPushBack(ListNode* phead,LTDataType x)//尾插
{
	/*assert(phead);
	ListNode* tail = phead->prev;
	ListNode* newnode = BuyListNode(x);
	tail->next = newnode;
	newnode->prev = tail;
	newnode->next = phead;
	phead->prev = newnode;*/
	ListInsert(phead, x);
}

(5)頭插

void ListPushFront(ListNode* phead, LTDataType x)//頭插
{
	assert(phead);
	ListNode* first = phead->next;
	ListNode* newnode = BuyListNode(x);
	phead->next = newnode;
	newnode->prev = phead;
	newnode->next = first;
	first->prev = newnode;	
}

(6)頭刪

void ListPushFront(ListNode* phead)//頭刪
{
	assert(phead);
	ListNode* first = phead->next;
	ListNode* second = first->next;
	free(first);
	phead->next = second;
	second->prev = phead;
}

(7)尾刪

void ListPushBack(ListNode* phead)//尾刪
{
	assert(phead);
	ListNode* tail = phead->prev;
	ListNode* tailPrev = tail->prev;
	free(tail);
	tailPrev->next = phead;
	phead->prev = tailPrev;
}

(8)查找某個值的位置

ListNode ListFind(ListNode* phead, LTDataType x)//查找值的位置
{
	assert(phead);
	ListNode*  cur = phead->next;
	while (cur !=phead)
	{
		if (cur->data == x)
			return cur;
		cur = cur->next;
	}
	return NULL;
}

(9)插入

void ListInsert(ListNode* pos,LTDataType x)//插入
{
	assert(pos);
	ListNode* prev = pos->prev;
	ListNode* newnode = BuyListNode(x);
	prev->next = newnode;
	newnode->prev = prev;
	newnode->next = pos;
	pos->prev = newnode;
}

(10)刪除

void ListErase(ListNode* pos)//刪除某位置的節(jié)點
{
	assert(pos);
	ListNode* prev = pos->prev;
	ListNode* next = pos->next;
	prev->next = next;
	next->prev = prev;
	free(pos);
}

(11)判斷是否為空

int ListEmpty(ListNode* phead)
{
	assert(phead);
	return phead->next == phead ? 1 : 0;//空為1,不空為0
}

(12)鏈表的長度

int ListSize(ListNode* phead)
{
	assert(phead);
	int size = 0;
	ListNode* cur = phead->next;
	while (cur != phead)
	{
		size++;
		cur = cur->next;
	}
	return size;
}

(13)銷毀鏈表

void ListDestory(ListNode* phead)
{
	assert(phead);
	ListNode* cur = phead->next;
	while (cur != phead)
	{
		ListNode* next = cur->next;
		free(cur);
		cur = cur->next;
	}
	free(phead);
}

(14)打印鏈表

void ListPrint(ListNode* phead)//打印
{
	ListNode* cur = phead->next;
	while (cur != phead)
	{
		printf("%d", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 天天插狠狠干 | 日本一区二区三区在线 观看网站 | 久久99国产精品久久欧美 | 香蕉黄视频 | 99久久精品国产片久人 | 亚洲黄色网址大全 | 香蕉视频亚洲 | 日韩视频在线观看一区二区 | 一级特黄国产高清毛片97看片 | 国内偷自视频区视频综合 | 久久久久久岛国免费网站 | 黄色毛片免费观看 | 97视频免费在线观看 | 国产毛片女人18水多 | 中文国产成人久久精品小说 | 四虎www成人影院 | 久久久夜夜夜 | 中国大乳久久 | 96影院| 四虎一级片 | 亚洲一区精品中文字幕 | 三级性生活视频 | 精品久久一区二区 | 久久精品国产国语对白 | 牛牛影视午夜免费福利 | 青青青国产免费线在 | 成年女人aaaaa毛片 | 久热中文字幕在线精品首页 | 日本乱人伦片中文字幕三区 | 亚洲精品tv久久久久久久久 | h网站国产 | 九九热在线观看 | 国产综合精品久久久久成人影 | 国产中文一区 | 深夜色 | 999精品在线 | 国产精品1区 | 91福利在线视频 | 一级特黄a免费大片 | 中文字幕久热精品视频免费 | 久久黄色网 |