国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

上一篇文章講述了線性表中的順序表,這篇文章講述關(guān)于鏈表的定義、類別、實(shí)現(xiàn)、多種不同鏈表的優(yōu)缺點(diǎn)和鏈表與順序表的優(yōu)缺點(diǎn)。
關(guān)于上一篇文章的鏈接:線性表之順序表

一、鏈表的定義

鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

二、鏈表的分類

1. 單向和雙向

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

2. 帶頭和不帶頭

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表
【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

3. 循環(huán)和不循環(huán)

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表
【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

4. 常用(無頭單向非循環(huán)鏈表和帶頭雙向循環(huán)鏈表)

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表

三、無頭單向非循環(huán)鏈表的接口及實(shí)現(xiàn)

1. 單鏈表的接口

#pragma once
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

// slist.h
typedef int SLTDateType;
typedef struct SListNode
{
	SLTDateType data;
	struct SListNode* next;
}SListNode;

// 動(dòng)態(tài)申請一個(gè)節(jié)點(diǎn)
SListNode* BuySListNode(SLTDateType x);
// 單鏈表打印
void SListPrint(SListNode* plist);
// 單鏈表尾插
void SListPushBack(SListNode** pplist, SLTDateType x);
// 單鏈表的頭插
void SListPushFront(SListNode** pplist, SLTDateType x);
// 單鏈表的尾刪
void SListPopBack(SListNode** pplist);
// 單鏈表頭刪
void SListPopFront(SListNode** pplist);
// 單鏈表查找
SListNode* SListFind(SListNode* plist, SLTDateType x);
// 單鏈表在pos位置之后插入x
void SListInsertAfter(SListNode* pos, SLTDateType x);
// 單鏈表刪除pos位置之后的值
void SListEraseAfter(SListNode* pos);
// 單鏈表的銷毀
void SListDestroy(SListNode* plist);

2. 接口的實(shí)現(xiàn)

#include "slist.h"

SListNode* BuySListNode(SLTDateType x)
{
	//創(chuàng)造新節(jié)點(diǎn)
	SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
	if (newnode == NULL)
	{
		perror("malloc");
		return NULL;
	}
	//新節(jié)點(diǎn)初始化
	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

void SListPushBack(SListNode** pplist, SLTDateType x)
{
	//這里使用二級指針的原因是:
	//若鏈表為空,需要改變的就是結(jié)構(gòu)體指針,需要結(jié)構(gòu)體指針的地址
	//若傳入的是一級指針,這里傳入的只是臨時(shí)拷貝,無法改變函數(shù)外的變量
	if (*pplist == NULL)
	{
		*pplist = BuySListNode(x);
	}
	//若不為空,需要改變的是結(jié)構(gòu)體,只需要結(jié)構(gòu)體的指針
	else
	{
		SListNode* tail = *pplist;
		SListNode* newnode = BuySListNode(x);
		while (tail->next)
		{
			tail = tail->next;
		}

		tail->next = newnode;
	}

}

void SListPrint(SListNode* plist)
{
	while (plist)
	{
		printf("%d->", plist->data);
		plist = plist->next;
	}
	printf("NULL");
}

void SListPushFront(SListNode** pplist, SLTDateType x)
{
	//這里使用二級指針的原因是:每次頭刪都需要改變頭節(jié)點(diǎn)
	SListNode* newnode = BuySListNode(x);
	
	newnode->next = *pplist;
	*pplist = newnode;
}

//無頭單鏈表尾刪刪除節(jié)點(diǎn)的時(shí)候有三種情況
void SListPopBack(SListNode** pplist)
{
	//沒有節(jié)點(diǎn)
	assert(*pplist);

	//一個(gè)節(jié)點(diǎn)
	if ((*pplist)->next == NULL)
	{
		free(*pplist);
		*pplist = NULL;
	}
	//多個(gè)節(jié)點(diǎn)
	else
	{
		//尾刪既可以找尾找尾的前一個(gè)節(jié)點(diǎn),也可以創(chuàng)造一個(gè)變量記錄尾節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)

		//創(chuàng)造一個(gè)變量記錄尾節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
		//	SListNode* tail = *pplist;
		//	SListNode* prev = NULL;
		//	while (tail->next)
		//	{
		//		prev = tail;
		//		tail = tail->next;
		//	}

		//	free(prev->next);
		//	prev->next = NULL;
		
		//找尾找尾的前一個(gè)節(jié)點(diǎn)
		SListNode* tail = *pplist;
		while (tail->next->next)
		{
			tail = tail->next;
		}

		free(tail->next);
		tail->next = NULL;
	}
}

//無頭單鏈表頭刪刪除節(jié)點(diǎn)的時(shí)候有三種情況,但只有一個(gè)節(jié)點(diǎn)和多個(gè)節(jié)點(diǎn)的情況可以合并
void SListPopFront(SListNode** pplist)
{
	//無節(jié)點(diǎn)時(shí)
	assert(*pplist);
	
	//有節(jié)點(diǎn)時(shí)
	SListNode* del = *pplist;
	*pplist = del->next;
	free(del);
}

SListNode* SListFind(SListNode* plist, SLTDateType x)
{
	SListNode* cur = plist;
	while (cur)
	{
		if (cur->data == x)
			return cur;
		cur = cur->next;
	}
	return NULL;
}

void SListInsertAfter(SListNode* pos, SLTDateType x)
{
	//斷言:在pos后面插入一個(gè)節(jié)點(diǎn),最差的情況是pos為尾節(jié)點(diǎn),但不能為NULL
	assert(pos);
	SListNode* cur = (SListNode*)malloc(sizeof(SListNode));
	if (cur == NULL)
	{
		perror("malloc");
		return;
	}
	cur->data = x;
	cur->next = pos->next;
	pos->next = cur;
}

void SListEraseAfter(SListNode* pos)
{
	//需要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)不能為NULL,刪除節(jié)點(diǎn)也不能為NULL
	assert(pos);
	assert(pos->next);
	
	SListNode* next = pos->next;
	pos->next = next->next;
	free(next);
}

void SListDestroy(SListNode* plist)
{
	SListNode* del = NULL;
	while (plist)
	{
		del = plist;
		plist = plist->next;
		free(del);
	}
}

四、帶頭雙向循環(huán)鏈表接口的及實(shí)現(xiàn)

1. 雙向鏈表的接口

#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

// 帶頭+雙向+循環(huán)鏈表增刪查改實(shí)現(xiàn)
typedef int LTDataType;
typedef struct ListNode
{
	LTDataType data;
	struct ListNode* next;
	struct ListNode* prev;
}ListNode;

// 創(chuàng)建返回鏈表的頭結(jié)點(diǎn).
ListNode* ListCreate();
// 雙向鏈表銷毀
void ListDestory(ListNode* pHead);
// 雙向鏈表打印
void ListPrint(ListNode* pHead);
// 雙向鏈表尾插
void ListPushBack(ListNode* pHead, LTDataType x);
// 雙向鏈表尾刪
void ListPopBack(ListNode* pHead);
// 雙向鏈表頭插
void ListPushFront(ListNode* pHead, LTDataType x);
// 雙向鏈表頭刪
void ListPopFront(ListNode* pHead);
// 雙向鏈表查找
ListNode* ListFind(ListNode* pHead, LTDataType x);
// 雙向鏈表在pos的前面進(jìn)行插入
void ListInsert(ListNode* pos, LTDataType x);
// 雙向鏈表刪除pos位置的節(jié)點(diǎn)
void ListErase(ListNode* pos);

2. 接口的實(shí)現(xiàn)

#include "list.h"

// 創(chuàng)建返回鏈表的頭結(jié)點(diǎn).
ListNode* ListCreate()
{
	ListNode* phead = (ListNode*)malloc(sizeof(ListNode));
	if (phead == NULL)
	{
		perror("malloc");
		return NULL;
	}

	//讓頭的 next 和 prev 都指向自己
	//則雙向鏈表為空
	phead->next = phead;
	phead->prev = phead;

	return phead;
}

// 創(chuàng)造新節(jié)點(diǎn)
ListNode* BuyTLNode(LTDataType x)
{
	ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	if (newnode == NULL)
	{
		perror("malloc");
		return NULL;
	}

	newnode->data = x;

	return newnode;
}

// 雙向鏈表尾插
void ListPushBack(ListNode* pHead, LTDataType x)
{
	/*ListNode* tail = pHead->prev;
	ListNode* newnode = BuyTLNode(x);
	
	newnode->next = pHead;
	newnode->prev = tail;
	tail->next = newnode;
	pHead->prev = newnode;*/
	ListInsert(pHead, x);   //復(fù)用
}

// 雙向鏈表打印
void ListPrint(ListNode* pHead)
{
	printf("header <--> ");

	//打印的時(shí)候,由于頭內(nèi)的 data 的值沒用
	//則從頭的的下一個(gè)節(jié)點(diǎn)開始打印
	//并且在循環(huán)到頭的時(shí)候打印結(jié)束
	ListNode* cur = pHead ->next;
	while (cur != pHead)
	{
		printf("%d <--> ", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

// 判斷雙向鏈表是否為空
bool LTEmpty(ListNode* pHead)
{
	assert(pHead);
	return pHead->next == pHead;
}

// 雙向鏈表頭刪
void ListPopFront(ListNode* pHead)
{
	assert(pHead);
	assert(!(LTEmpty(pHead)));

	/*ListNode* first = pHead->next;
	ListNode* second = first->next;
	pHead->next = second;
	second->prev = pHead;

	free(first);*/
	ListErase(pHead->next);   //復(fù)用
}

// 雙向鏈表頭插
void ListPushFront(ListNode* pHead, LTDataType x)
{
	/*ListNode* next = pHead->next;
	ListNode* newnode = BuyTLNode(x);
	
	newnode->next = next;
	newnode->prev = pHead;
	next->prev = newnode;
	pHead->next = newnode;*/
	ListInsert(pHead->next, x);//復(fù)用
}

// 雙向鏈表尾刪
void ListPopBack(ListNode* pHead)
{
	assert(pHead);               
	assert(!(LTEmpty(pHead)));
	/*ListNode* tail = pHead->prev;
	ListNode* tailPrev = tail->prev;

	tailPrev->next = pHead;
	pHead->prev = tailPrev;

	free(tail);*/

	ListErase(pHead->prev); //復(fù)用
}

// 雙向鏈表查找
ListNode* ListFind(ListNode* pHead, LTDataType x)
{
	ListNode* cur = pHead ->next;

	while (cur)
	{
		if (cur->data == x)
		{
			return cur;
		}
		cur = cur->next;
	}

	return NULL;
}


// 雙向鏈表在pos的前面進(jìn)行插入
void ListInsert(ListNode* pos, LTDataType x)
{
	assert(pos);
	ListNode* newnode = BuyTLNode(x);
	ListNode* posPrev = pos->prev;

	newnode->next = pos;
	newnode->prev = posPrev;
	posPrev->next = newnode;
	pos->prev = newnode;
}
// 雙向鏈表刪除pos位置的節(jié)點(diǎn)
void ListErase(ListNode* pos)
{
	assert(pos);

	ListNode* posPrev = pos->prev;
	ListNode* posNext = pos->next;

	posPrev->next = posNext;
	posNext->prev = posPrev;

	free(pos);
}

五、帶頭雙向循環(huán)鏈表VS無頭單向非循環(huán)鏈表

1. 帶頭雙向循環(huán)鏈表

1.1 帶頭雙向循環(huán)鏈表的優(yōu)點(diǎn):

  1. 可以自由地在鏈表中任意位置插入和刪除節(jié)點(diǎn),這是因?yàn)殡p向鏈表可以方便地找到前驅(qū)后繼節(jié)點(diǎn)。
  2. 可以支持雙向遍歷,即可以從前往后或從后往前遍歷鏈表。
  3. 可以更加高效地實(shí)現(xiàn)某些特殊的操作,比如在鏈表中刪除指定節(jié)點(diǎn),需要同時(shí)修改其前驅(qū)和后繼節(jié)點(diǎn)的指針,雙向鏈表則可以直接完成這個(gè)操作,而單向鏈表則需要遍歷到前驅(qū)節(jié)點(diǎn)才能完成。

1.2 帶頭雙向循環(huán)鏈表的缺點(diǎn):

  1. 因?yàn)槊總€(gè)節(jié)點(diǎn)都要額外存儲(chǔ)一個(gè)前驅(qū)節(jié)點(diǎn)的指針,所以需要更多的內(nèi)存空間。
  2. 因?yàn)樾枰S護(hù)前驅(qū)和后繼節(jié)點(diǎn)的指針,所以在插入和刪除節(jié)點(diǎn)時(shí)需要更多的操作,導(dǎo)致時(shí)間復(fù)雜度較高。

2. 無頭單向非循環(huán)鏈表

2.1 無頭單向非循環(huán)鏈表的優(yōu)點(diǎn):

  1. 因?yàn)槊總€(gè)節(jié)點(diǎn)只需存儲(chǔ)一個(gè)后繼節(jié)點(diǎn)的指針,所以需要較少的內(nèi)存空間。
  2. 在插入和刪除節(jié)點(diǎn)時(shí),只需要修改前一個(gè)節(jié)點(diǎn)的指針,不需要修改后一個(gè)節(jié)點(diǎn)的指針,操作相對簡單,導(dǎo)致時(shí)間復(fù)雜度較低。

2.2 無頭單向非循環(huán)鏈表的缺點(diǎn):

  1. 無法實(shí)現(xiàn)雙向遍歷,即無法從后往前遍歷鏈表。
  2. 在刪除指定節(jié)點(diǎn)時(shí),需要先遍歷到其前驅(qū)節(jié)點(diǎn),才能完成刪除操作,導(dǎo)致刪除效率較低。

3. 小結(jié)

總之,選擇哪種鏈表數(shù)據(jù)結(jié)構(gòu)應(yīng)該根據(jù)具體的應(yīng)用場景和需要做的操作來決定。如果需要頻繁地插入和刪除節(jié)點(diǎn),且需要支持雙向遍歷,可以選擇帶頭雙向循環(huán)鏈表;如果需要占用較少的內(nèi)存空間,且不需要雙向遍歷,可以選擇無頭單向非循環(huán)鏈表。


六、鏈表VS順序表

1. 帶頭雙向循環(huán)鏈表

1.1 鏈表的優(yōu)點(diǎn):

  1. 動(dòng)態(tài)內(nèi)存分配:鏈表可以在運(yùn)行時(shí)動(dòng)態(tài)地分配內(nèi)存,因此可以根據(jù)實(shí)際需要靈活地增加或減少節(jié)點(diǎn)數(shù)。
  2. 插入和刪除操作高效:由于鏈表中的元素不必在連續(xù)的內(nèi)存空間中存儲(chǔ),所以插入和刪除操作非常高效,只需要修改指針,而不需要移動(dòng)所有后續(xù)元素。
  3. 大小不受限制:鏈表的大小不受限制,可以根據(jù)實(shí)際需要進(jìn)行擴(kuò)展。

2. 鏈表的缺點(diǎn):

  1. 隨機(jī)訪問低效:由于鏈表中的元素不是按順序存儲(chǔ)的,因此隨機(jī)訪問某個(gè)元素的效率比較低,需要從頭開始遍歷O(N)。
  2. 存儲(chǔ)空間開銷大:鏈表每個(gè)節(jié)點(diǎn)都需要額外的指針來指向下一個(gè)節(jié)點(diǎn),這樣會(huì)增加存儲(chǔ)空間的開銷。
  3. 緩存不友好:由于鏈表中的元素不是按順序存儲(chǔ)的,因此可能會(huì)導(dǎo)致緩存未命中,降低訪問效率。

2. 順序表

2.1順序表的優(yōu)點(diǎn)

  1. 隨機(jī)訪問高效:下標(biāo)的隨機(jī)訪問效率高O(1)。
  2. 尾刪尾插高效:順序表的尾插尾刪不需要移動(dòng)數(shù)據(jù),效率高。
  3. 緩存友好:由于鏈表中的元素是按順序存儲(chǔ)的,緩存命中率高,訪問效率高。

2.2順序表的缺點(diǎn)

  1. 部分插入刪除操作低效:由于順序表中的元素是物理結(jié)構(gòu)上是連續(xù)的,當(dāng)數(shù)據(jù)插入刪除前面順序表的時(shí)候需要移動(dòng)數(shù)據(jù),效率低O(N)。
  2. 內(nèi)存大小受限:當(dāng)順序表內(nèi)存存滿后需要擴(kuò)容,擴(kuò)容需要代價(jià),并且順序表通常會(huì)有內(nèi)存的浪費(fèi)情況。

結(jié)尾

如果有什么建議和疑問,或是有什么錯(cuò)誤,希望大家能夠提一下。
希望大家以后也能和我一起進(jìn)步??!
如果這篇文章對你有用的話,希望能給我一個(gè)小小的贊!文章來源地址http://www.zghlxwxcb.cn/news/detail-448784.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】線性表之鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 線性表之鏈表

    線性表之鏈表

    在計(jì)算機(jī)科學(xué)中,鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和組織數(shù)據(jù)。相比于順序表,鏈表具有更高的靈活性和動(dòng)態(tài)性。 在本博客中,我們將深入討論鏈表的概念、分類以及實(shí)現(xiàn)方法。我們將從鏈表的基本概念開始,了解鏈表是如何組織數(shù)據(jù)的,并分析鏈表的優(yōu)勢和劣勢。

    2024年02月11日
    瀏覽(27)
  • DS線性表之鏈表

    DS線性表之鏈表

    我們上一期介紹了順序表,它的底層就是數(shù)組,我們也分別對順序表的動(dòng)態(tài)版本和靜態(tài)版本進(jìn)行了實(shí)現(xiàn)!并且分析了順序表的優(yōu)缺點(diǎn),優(yōu)點(diǎn)是:尾插、尾刪效率很高,其時(shí)間復(fù)雜度是O(1);缺點(diǎn)是:在頭部插入、刪除的時(shí)候效率低,其時(shí)間復(fù)雜度是O(N);而且即使是動(dòng)態(tài)版本的擴(kuò)

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)之鏈表

    數(shù)據(jù)結(jié)構(gòu)之鏈表

    頭文件 自定義函數(shù) 主函數(shù) 效果圖 ?

    2024年01月25日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),它可以用來存儲(chǔ)一組數(shù)據(jù),并支持快速的插入和刪除操作。相比于數(shù)組,鏈表的大小可以動(dòng)態(tài)地增加或減小,因此在某些場景下更加靈活和高效。本文將詳細(xì)介紹鏈表的定義、基本操作和應(yīng)用場景,希望能夠幫助讀者深入理解鏈表的原理和實(shí)現(xiàn)。

    2024年02月03日
    瀏覽(22)
  • 算法與數(shù)據(jù)結(jié)構(gòu)之鏈表

    鏈表的定義,相信大家都知道,這里就不贅述了只是鏈表分單向鏈表和雙向鏈表,廢話不多說,直接上代碼 鏈表節(jié)點(diǎn)的定義: 打印鏈表的兩種方式: 翻轉(zhuǎn)單向鏈表:核心思路是先斷開連接,再將next指向前繼節(jié)點(diǎn),為了避免斷開之后,找不到前繼節(jié)點(diǎn),需要用一個(gè)臨時(shí)變量記

    2024年02月05日
    瀏覽(28)
  • C語言數(shù)據(jù)結(jié)構(gòu)之鏈表

    C語言數(shù)據(jù)結(jié)構(gòu)之鏈表

    在上一篇博客中我們提到,線性表包括順序表和鏈表,順序表在上篇博客中已經(jīng)介紹,本篇博客介紹一下另一種線性表—— 鏈表 。 概念:鏈表是?種 物理存儲(chǔ)結(jié)構(gòu)上?連續(xù)、?順序 的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的 。 鏈表的結(jié)構(gòu)跟?

    2024年04月22日
    瀏覽(31)
  • C++數(shù)據(jù)結(jié)構(gòu)之鏈表(詳解)

    C++數(shù)據(jù)結(jié)構(gòu)之鏈表(詳解)

    主要參考文章地址 01.鏈表基礎(chǔ)知識(shí) | 算法通關(guān)手冊 (itcharge.cn)) 本次內(nèi)容是對鏈表的總結(jié),可以看了上面的文章之后。 在看我下面的內(nèi)容,做一個(gè)簡短的復(fù)習(xí),且本內(nèi)容的代碼均用C++實(shí)現(xiàn),而參考資料的代碼則為python。 每一個(gè)標(biāo)題都有一個(gè)完整的鏈接,也可以點(diǎn)擊下面的鏈

    2024年02月15日
    瀏覽(58)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)】線性表之棧、隊(duì)列

    前面兩篇文章講述了關(guān)于線性表中的順序表與鏈表,這篇文章繼續(xù)講述線性表中的 棧和隊(duì)列。 這里講述的兩種線性表與前面的線性表不同,只允許在一端入數(shù)據(jù),一段出數(shù)據(jù),詳細(xì)內(nèi)容請看下面的文章。 順序表與鏈表兩篇文章的鏈接: 線性表之順序表 線性表之鏈表 注意:

    2024年02月06日
    瀏覽(93)
  • 數(shù)據(jù)結(jié)構(gòu):線性表之-順序表

    數(shù)據(jù)結(jié)構(gòu):線性表之-順序表

    目錄 1.線性表概念 1.1 什么是順序列表 1.2 線性表 2.順序表實(shí)現(xiàn) 將有以下功能: 詳細(xì)過程 順序表的動(dòng)態(tài)存儲(chǔ) 順序表初始化 尾插 擴(kuò)容 頭插 更改后的尾插 尾刪 頭刪 打印 釋放內(nèi)存 優(yōu)化順序表 (任意位置插入刪除) 優(yōu)化后的頭插尾插 優(yōu)化后的頭刪尾刪 查找和刪除 進(jìn)行裝飾(菜單

    2024年02月10日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)】- 鏈表之單鏈表(下)

    【數(shù)據(jù)結(jié)構(gòu)】- 鏈表之單鏈表(下)

    未來藏在迷霧中 叫人看來膽怯 帶你踏足其中 就會(huì)云開霧散 本章是關(guān)于數(shù)據(jù)結(jié)構(gòu)中的鏈表之單鏈表(下) 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 1.2.1 在pos位置插入(也就是pos位置之前) 流程圖 多個(gè)節(jié)點(diǎn) 一個(gè)節(jié)點(diǎn) 1.2.2 在pos位置之后插入 流程圖: 注意: 下面這種寫

    2023年04月23日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包