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

【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?

這篇具有很好參考價(jià)值的文章主要介紹了【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?,數(shù)據(jù)結(jié)構(gòu)探索,數(shù)據(jù)結(jié)構(gòu)

?? 嶼小夏 : 個(gè)人主頁(yè)
??個(gè)人專欄 : 數(shù)據(jù)結(jié)構(gòu)解析
?? 莫道桑榆晚,為霞尚滿天!

??前言

? 什么是數(shù)據(jù)結(jié)構(gòu)?我們?yōu)槭裁匆獙W(xué)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)中的順序表長(zhǎng)什么樣子?它是怎么運(yùn)用?

? 本期我們將對(duì)這些一一講解,徹底明白數(shù)據(jù)結(jié)構(gòu)的重要性,以及順序表是一種什么的數(shù)據(jù)結(jié)構(gòu)。

???數(shù)據(jù)結(jié)構(gòu)的重要性

【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?,數(shù)據(jù)結(jié)構(gòu)探索,數(shù)據(jù)結(jié)構(gòu)

??什么是數(shù)據(jù)結(jié)構(gòu)?

? 數(shù)據(jù)結(jié)構(gòu)指的是計(jì)算機(jī)中組織和存儲(chǔ)數(shù)據(jù)的方式。它涉及到數(shù)據(jù)的組織、管理和操作,以便能夠高效地訪問和處理數(shù)據(jù)。

??數(shù)據(jù)結(jié)構(gòu)能干嘛?

? 數(shù)據(jù)結(jié)構(gòu)可以用來解決各種計(jì)算問題,它提供了不同的數(shù)據(jù)類型和操作,使得我們可以有效地存儲(chǔ)和操作數(shù)據(jù)。通過選擇合適的數(shù)據(jù)結(jié)構(gòu),我們可以提高算法的效率,減少時(shí)間和空間的消耗。

??數(shù)據(jù)結(jié)構(gòu)有多重要?

? 它是算法設(shè)計(jì)和優(yōu)化的基礎(chǔ),對(duì)于解決實(shí)際問題和提高計(jì)算機(jī)程序的性能至關(guān)重要。良好的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)可以提高程序的可讀性、可維護(hù)性和可擴(kuò)展性,同時(shí)也能夠減少資源的消耗和提高程序的執(zhí)行效率。

???順序表的概念與結(jié)構(gòu)

??順序表的概念

? 順序表是一種線性表的存儲(chǔ)結(jié)構(gòu),它將元素順序地存儲(chǔ)在一塊連續(xù)的內(nèi)存空間中。順序表中的元素在內(nèi)存中的物理地址是連續(xù)的,通過元素在內(nèi)存中的相對(duì)位置來表示元素之間的邏輯關(guān)系。

??順序表的結(jié)構(gòu)

? 順序表由兩部分組成:數(shù)據(jù)存儲(chǔ)區(qū)和長(zhǎng)度信息。數(shù)據(jù)存儲(chǔ)區(qū)是一塊連續(xù)的內(nèi)存空間,用來存儲(chǔ)順序表中的元素。長(zhǎng)度信息記錄了順序表中元素的個(gè)數(shù)。

??順序表圖例

【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?,數(shù)據(jù)結(jié)構(gòu)探索,數(shù)據(jù)結(jié)構(gòu)

???動(dòng)態(tài)順序表的實(shí)現(xiàn)

??順序表所需要的接口

typedef int SLDatatype;
typedef struct SeqList
{
	SLDatatype* array;
	int size;//有效數(shù)據(jù)個(gè)數(shù)
	int capacity;//空間大小
}SL;
//增刪查改
void SLInit(SL* ps);//初始化
void SLdestroy(SL* ps);//銷毀
//打印
void SLprint(SL* ps);
//檢查空間
void Inspect(SL* ps);
//尾插尾刪
void SLpushBack(SL* ps, SLDatatype x);
void SLpopback(SL* ps);
//頭插頭刪
void SLpushFront(SL*ps, SLDatatype x);
void SLpopFront(SL*ps);
//查找數(shù)據(jù)下標(biāo)
int  SLFind(SL* ps, SLDatatype x);
//在pox位置插入x
void SLInsert(SL* ps, int pox,SLDatatype x);
//刪除pox位置的值
void SLErase(SL* ps, int pox);
//修改pox位置的值
void SLModify(SL* ps, int pox, SLDatatype x);

??順序表的初始化

對(duì)順序表進(jìn)行初始化,使表的開始大小可以存儲(chǔ)4個(gè)有效元素。

void SLInit(SL* ps)
{
	assert(ps);
	ps->array = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);
	if (ps->array == NULL)
	{
		perror("malloc failde");
		exit(-1);
	}
	ps->size = 0;
	ps->capacity = 4;
}

??順序表的空間檢查

若是表中的元素個(gè)數(shù)已滿,則進(jìn)行擴(kuò)容,擴(kuò)容的后大小是原順序表的2倍。

void Inspect(SL* ps)
{
	assert(ps);
	if (ps->size == ps->capacity)
	{
		SLDatatype* tmp = (SLDatatype*)realloc(ps->array, ps->capacity * 2 * sizeof(SLDatatype));
		if (tmp == NULL)
		{
			perror("realloc failed");
			exit(-1);
		}
		ps->array = tmp;
		ps->capacity *= 2;
	}
}

??順序表的打印

打印順序表中所有的元素。

void SLprint(SL* ps)
{
	assert(ps);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->array[i]);
	}
	printf("\n");
}

??順序表的尾部插入

在順序表的末尾插入元素。

void SLpushBack(SL* ps, SLDatatype x)
{
	assert(ps);
	Inspect(ps);
	ps->array[ps->size] = x;
	ps->size++;
}

??順序表的尾部刪除

將順序表最后一個(gè)元素刪除。

void SLpopback(SL* ps)
{
	assert(ps);
	assert(ps->size > 0);
	ps->size--;
}

??順序表的頭部插入

在順序表的頭部,表中首元素的前面插入新的元素,這時(shí)就需要將舊數(shù)據(jù)都往后挪一位。

void SLpushFront(SL* ps, SLDatatype x)
{
	assert(ps);
	Inspect(ps);
	int len = ps->size - 1;
	while (len >= 0)
	{
		ps->array[len + 1] = ps->array[len];
		len--;
	}
	ps->array[0] = x;
	ps->size++;
}

??順序表的頭部刪除

將頭部的首元素刪除。

//頭刪
void SLpopFront(SL* ps)
{
	assert(ps);
	int left = 1;
	while (left < ps->size)
	{
		ps->array[left - 1] = ps->array[left];
		left++;
	}
	ps->size--;
}

??順序表查找數(shù)據(jù)下標(biāo)

這一步是為了在指定的位置進(jìn)行增刪改查。

int  SLFind(SL* ps, SLDatatype x)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->array[i] == x)
		{
			return i;
		}
	}
	return -1;
}

??順序表指定位置插入元素

查找到要插入的位置下標(biāo),將元素插入。

void SLInsert(SL* ps, int pox, SLDatatype x)
{
	assert(ps);
	assert(pox >= 0 && pox <= ps->size);
	Inspect(ps);
	int end = ps->size - 1;
	while (end >= pox)
	{
		ps->array[end + 1] = ps->array[end];
		end--;
	}
	ps->array[pox] = x;
	ps->size++;
}

??順序表指定位置元素刪除

查找到要?jiǎng)h除的位置下標(biāo),將元素刪除。

void SLErase(SL* ps, int pox)
{
	assert(ps);
	assert(pox >= 0 && pox < ps->size);
	int begin = pox + 1;
	while (begin < ps->size)
	{
		ps->array[begin - 1] = ps->array[begin];
		begin++;
	}
	ps->size--;
}

??順序表修改指定位置的值

查找到要修改的值的位置下標(biāo),將舊的元素改為新的值。

void SLModify(SL* ps, int pox, SLDatatype x)
{
	assert(ps);
	assert(pox >= 0 && pox < ps->size);
	ps->array[pox] = x;
}

??順序表的銷毀

順序表使用完后,可以進(jìn)行釋放空間的操作。

void SLdestroy(SL* ps)
{
	assert(ps);
	free(ps->array);
	ps->array = NULL;
	ps->size = ps->capacity = 0;
}

??順序表的特點(diǎn)

  1. 內(nèi)存連續(xù):順序表的元素在內(nèi)存中是連續(xù)存儲(chǔ)的,可以通過下標(biāo)直接訪問元素。
  2. 隨機(jī)訪問:由于元素在內(nèi)存中的物理地址是連續(xù)的,可以通過下標(biāo)快速定位和訪問元素。
  3. 插入和刪除操作效率低:在順序表中插入或刪除元素時(shí),需要移動(dòng)其他元素的位置,導(dǎo)致操作效率較低。

??順序表的劣勢(shì)

  1. 中間/頭部的插入刪除,時(shí)間復(fù)雜度為O(N)
  2. 增容需要申請(qǐng)新空間,拷貝數(shù)據(jù),釋放舊空間。會(huì)有不小的消耗。
  3. 增容一般是呈2倍的增長(zhǎng),勢(shì)必會(huì)有一定的空間浪費(fèi)。例如當(dāng)前容量為100,滿了以后增容到200,我們?cè)倮^續(xù)插入了5個(gè)數(shù)據(jù),后面沒有數(shù)據(jù)插入了,那么就浪費(fèi)了95個(gè)數(shù)據(jù)空間。

???全篇總結(jié)

? 經(jīng)過上述一系列的代碼和文字講解,我們了解了數(shù)據(jù)結(jié)構(gòu)的基本概念,而順序表作為一種數(shù)據(jù)結(jié)構(gòu),它的特性和其獨(dú)特的特點(diǎn)也是非常鮮明。

?? 好了,由于篇幅有限,本章是只介紹了比較簡(jiǎn)單的一種數(shù)據(jù)結(jié)構(gòu)——順序表,后序還會(huì)有更多不同的數(shù)據(jù)結(jié)構(gòu)會(huì)分享給大家。
看到這里希望給博主留個(gè):??點(diǎn)贊??收藏??關(guān)注!
有問題可以評(píng)論或者私信呢秒回哦。
【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?,數(shù)據(jù)結(jié)構(gòu)探索,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-715776.html

到了這里,關(guān)于【從零開始拿捏數(shù)據(jù)結(jié)構(gòu)】 順序表是什么?它有什么樣的特性?結(jié)構(gòu)到底是什么樣的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包