最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(頭插頭刪)教程示例詳解

 更新時(shí)間:2022年02月15日 10:03:39   作者:?jiǎn)虇碳业凝堼? 
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)順序表中增刪改關(guān)于頭插頭刪的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

頭插操作

繼上一章內(nèi)容(C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改教程示例詳解),繼續(xù)講講順序表的基礎(chǔ)操作。

和尾插不一樣,尾插出手闊綽直接的開(kāi)空間,咱頭插能開(kāi)嗎?好像沒(méi)聽(tīng)說(shuō)過(guò)哪個(gè)接口可以在數(shù)據(jù)前面開(kāi)一片空間吧,那我們思路就只有一個(gè)了——挪數(shù)據(jù)。那應(yīng)該從第一位開(kāi)始挪嗎?注意,這和 memcpy 函數(shù)機(jī)制是一樣的,并不意味著后面數(shù)據(jù)一起挪動(dòng),也不會(huì)彼此獨(dú)立,而是相互影響,挪動(dòng)的數(shù)據(jù)會(huì)對(duì)后面數(shù)據(jù)進(jìn)行覆蓋。

在這里插入圖片描述

那我們的邏輯就應(yīng)該是從后往前挪,那我們就直接定一個(gè)下標(biāo),指向這段空間的最后一個(gè)位置即可,再利用香香 while 循環(huán)一手:

void pushfront(st* s, type x)
{
	assert(s);
	int end = s->size - 1;
	while (end >= 0)
	{
		s->a[end + 1] = s->a[end];//將從后往前的數(shù)據(jù)都向后挪一位
		end--;
	}
	s->a[0] = x;
	s->size++;
}

我們的 end 下標(biāo)不是指向 size ,而是size后面一位也就是我們初始的capacity,end = 0時(shí)處理的是第一位之后的數(shù)據(jù),那么我們while循環(huán)時(shí)就應(yīng)該循環(huán)到 end<0為止。挪完了就可以sei數(shù)據(jù),最后不要忘了讓size++。
結(jié)果如下:

在這里插入圖片描述


我們?nèi)绻麑?duì)之前寫(xiě)尾插時(shí)的細(xì)節(jié)記得的話,我們是需要有擴(kuò)容操作的,這么寫(xiě)過(guò)去寫(xiě)過(guò)來(lái)很難受啊,我們就直接做成接口直接調(diào)用豈不美哉?

void enough(st* s)
{
	if (s->size == s->capacity)
	{
		s->capacity *= 2;
		s->a = (type*)realloc(s->a, sizeof(type) * s->capacity);
		if (s->a == NULL)
		{
			printf("擴(kuò)容失敗\n");
			exit(0);
		}
	}
}

頭刪操作

一樣的,在頭刪操作時(shí)不僅要像尾刪一樣置0,還得把數(shù)據(jù)挪回去,注意是從前往后挪,不然數(shù)據(jù)又會(huì)被覆蓋,最后size–一下就搞定:

void popfront(st* s)
{
	assert(s);
	enough(s);
	int head = 0;
	while (head < s->size - 1)
	{
		s->a[head] = s->a[head + 1]; //從前往后的數(shù)據(jù)依次向前挪一位
		head++;
	}
	s->size--;
}

結(jié)果如下:

在這里插入圖片描述

小結(jié)

綜上所述,順序表其實(shí)就是在數(shù)組的基礎(chǔ)上保留了一個(gè)特性——數(shù)據(jù)是連續(xù)的,但又?jǐn)[脫了數(shù)組固定大小的限制,他適應(yīng)性超強(qiáng),隨插隨刪隨改。

但是順序表不是十全十美,我們數(shù)據(jù)量足夠龐大,比如已有一萬(wàn)條數(shù)據(jù)的空間,我要插入一萬(wàn)零一條,增容就會(huì)增到兩萬(wàn),空間浪費(fèi)率極高。另外,尾插尾刪操作是很快的,直接放入拿走數(shù)據(jù),這是順序表最常見(jiàn)的操作,這是他的特長(zhǎng)。

但是話說(shuō)回來(lái),頭插頭刪也很快嗎?顯然不是,頭插頭刪的時(shí)間復(fù)雜度是O(n), 代價(jià)全在數(shù)據(jù)挪動(dòng)上,所以如果要想不挪動(dòng)的話,就要涉及到鏈表的引入。但鏈表在二分查找,排序等方面都有致命缺陷,他不能隨機(jī)訪問(wèn),所以鏈表和順序表是相輔相成的。

今天就先到這里吧,摸了家人們,更多關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)順序表增刪改的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中指針函數(shù)與函數(shù)指針的使用

    C++中指針函數(shù)與函數(shù)指針的使用

    今天小編就為大家分享一篇關(guān)于C++中指針函數(shù)與函數(shù)指針的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    單向鏈表(單鏈表)是鏈表的一種,其特點(diǎn)是鏈表的鏈接方向是單向的,對(duì)鏈表的訪問(wèn)要通過(guò)順序讀取從頭部開(kāi)始。本文將為大家詳細(xì)講講單向鏈表的實(shí)現(xiàn)與使用,需要的可以參考一下
    2022-08-08
  • C 轉(zhuǎn)移表/轉(zhuǎn)換表的深入分析

    C 轉(zhuǎn)移表/轉(zhuǎn)換表的深入分析

    本篇文章是對(duì)c語(yǔ)言中轉(zhuǎn)移表/轉(zhuǎn)換表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++基于socket編程實(shí)現(xiàn)聊天室功能

    C++基于socket編程實(shí)現(xiàn)聊天室功能

    這篇文章主要介紹了C++基于socket編程實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳解VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法

    詳解VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法

    本文主要介紹了詳解VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 帶你了解如何用C++合并兩個(gè)有序鏈表

    帶你了解如何用C++合并兩個(gè)有序鏈表

    這篇文章主要介紹了c++ 如何合并兩個(gè)有序鏈表,小編感覺(jué)這篇文章還不錯(cuò),希望能幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2021-08-08
  • C語(yǔ)言返回值指針的函數(shù)詳解

    C語(yǔ)言返回值指針的函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言返回值指針的函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 利用C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)小游戲

    利用C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)小游戲

    這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語(yǔ)言各種操作符透徹理解下篇

    C語(yǔ)言各種操作符透徹理解下篇

    C?語(yǔ)言提供了豐富的操作符,除了上篇中的算術(shù)操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關(guān)系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來(lái)詳細(xì)了解吧
    2022-02-02
  • C++中mutable與volatile的深入理解

    C++中mutable與volatile的深入理解

    這篇文章主要給的阿加介紹了關(guān)于C++中mutable與volatile的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

海原县| 永吉县| 濉溪县| 托克托县| 钟山县| 江口县| 寻甸| 七台河市| 克什克腾旗| 南投县| 淮南市| 普洱| 洛隆县| 平塘县| 仁怀市| 进贤县| 鸡泽县| 晋宁县| 富锦市| 横山县| 广水市| 晴隆县| 张家港市| 湾仔区| 安岳县| 凤城市| 徐闻县| 大埔县| 林口县| 金华市| 栾川县| 苍溪县| 沙洋县| 称多县| 扎赉特旗| 彭泽县| 金华市| 淳安县| 杨浦区| 东乌珠穆沁旗| 南华县|