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

C++超詳細分析順序表

 更新時間:2022年03月24日 11:03:56   作者:程序猿教你打籃球  
程序中經常需要將一組數據元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數等。一組數據中包含的元素個數可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關系由它們的存儲順序自然表示

本次我們解剖順序表將從以下三個結構:

1、靜態(tài)順序表和動態(tài)順序表

2、順序表實現增刪查改等常見接口

3、順序表相關OJ題練習

什么是順序表

順序表是用一段物理地址連續(xù)的存儲單元依次存儲數據元素的線性結構,一般情況下采用數組存 儲。在數組上完成數據的增刪查改。

兄弟們兄弟們,記得摳字眼啊,順序表一定是連續(xù)的存儲單元,并且是依次存儲數據的?。。?!

順序表一般可以分為:

? 靜態(tài)順序表      ?? 動態(tài)順序表

靜態(tài)順序表:使用定長數組存儲,簡單來說大小是固定的,數據個數也是固定的!

動態(tài)順序表:使用動態(tài)開辟的數組存儲,簡單來說,裝滿了會自動擴大容量!

靜態(tài)順序表的實現我們就不講了,冬天到了春天還會遠嗎?會了動態(tài)你還不會靜態(tài)嗎?所以我們今天主要講動態(tài)順序表!靜態(tài)順序表搭建代碼如下:

// 順序表的靜態(tài)存儲
#define N 100
typedef int SLDataType;
typedef struct SeqList
{
    SLDataType array[N]; // 定長數組
    size_t size;     // 有效數據的個數 
}SeqList;

動態(tài)順序表

?? 來到今天的重點!動態(tài)順序表!

首先先來搭建順序表的結構。

?? 上面就是我給大家畫的基本一個結構圖了,下面我們來實現順序表的基本接口:

?? 首先我們順序表需要初始化:

 ?? 既然我們沒有在初始化給定大小,我們現在要判斷需不需要給動態(tài)表順序表增容:

 ?? 我們來實現動態(tài)順序表頭部插入數據:

 ?? 接著來實現尾部插入數據:

 ?? 我們要開始實現頭部刪除數據了:

?? 下面實現尾部刪除數據:

 ?? 接著我們來實現在pos下標位置插入數據:

 ?? 我們再來實現刪除pos下標位置的數據:

? 查找順序表中的元素x:

 ?? 修改指定pos下標的數據

在實際中在我上面寫的函數有些都可以復用哦!這個就等著你們去發(fā)現吧,我們接著往下走:

其實還有一些順序表的打印,清空,求元素個數,這些相信你們看完上面的內容對于你們來說非常容易!我就不一一舉例了,下面進入我們的習題時間!(●'?'●)

題目1:給你一個數組 nums 和一個值 val,你需要原地移除所有數值等于 val 的元素,并返回移除后數組的新長度。不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并原地修改輸入數組。元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。

示例 1:

輸入:nums = [0,1,2,2,3,0,4,2], val = 2

輸出:5, nums = [0,1,4,0,3]

解釋:函數應該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。注意這五個元素可為任意順序。你不需要考慮數組中超出新長度后面的元素。

題目來源:27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)

思路1:遍歷數組,發(fā)現元素為val就把后面的往前挪覆蓋掉val,但是這樣的時間復雜度為O(N²),這樣當數組全是val,效率就會特別低!

思路2:以空間換時間,開辟一個新數組,把不是val的數放到新數組,再把新數組的值拷貝回來!但是這樣的話空間復雜度O(N)不符合題意!

思路3:使用雙指針,空間復雜度O(1),時間復雜度O(n),代碼如下:

int removeElement(int* nums, int numsSize, int val)
{
	int src = 0;
	int dst = 0;
	while (src < numsSize)
	{
		if (nums[src] != val)
		{
			nums[dst++] = nums[src++];
		}
		else
		{
			++src;
		}
	}
	return dst;
}

題目2:給你兩個按非遞減順序排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。請你 合并 nums2 到 nums1 中,使合并后的數組同樣按非遞減順序排列。

示例 1:

輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3

輸出:[1,2,2,3,5,6]

解釋:需要合并 [1,2,3] 和 [2,5,6] 。

合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。

題目來源:88. 合并兩個有序數組 - 力扣(LeetCode) (leetcode-cn.com)

 那這道題的思路就留給小伙伴們自己去思考了,我就直接給你們上代碼!

void merge(int* nums1, int m, int* nums2, int n)
{
	int end1 = m - 1;
	int end2 = n - 1;
	int end = m + n - 1;
	while (end1 >= 0 && end2 >= 0)
	{
		if (nums1[end1] > nums2[end2])
		{
			nums1[end] = nums1[end1];
			--end;
			--end1;
		}
		else
		{
			nums1[end] = nums2[end2];
			--end;
			--end2;
		}
	}
	//如果是end2結束,不需要處理因為就是在nums1里面
	while (end2 >= 0)
	{
		nums1[end] = nums2[end2];
		--end;
		--end2;
	}
}

好了,通過這篇文章的學習,相信你會把順序表理解的更透徹,還是那句話,我們一起快樂編程不頭禿!加油奧里給!??????

????????????完結撒花!????????????

gitee(碼云):Mercury. (zzwlwp) - Gitee.com

到此這篇關于C++超詳細分析順序表的文章就介紹到這了,更多相關C++ 順序表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 簡述C++的復雜性

    簡述C++的復雜性

    這篇文章主要介紹了簡述C++的復雜性,幫助大家更好的理解和認識c++編程語言,感興趣的朋友可以了解下
    2020-08-08
  • 求斐波那契(Fibonacci)數列通項的七種實現方法

    求斐波那契(Fibonacci)數列通項的七種實現方法

    本篇文章是對求斐波那契(Fibonacci)數列通項的七種實現方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現三子棋游戲含完整代碼

    C語言實現三子棋游戲含完整代碼

    本文詳細講解了C語言實現三子棋游戲內含完整代碼,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 詳解C++11強類型枚舉

    詳解C++11強類型枚舉

    這篇文章主要介紹了C++11強類型枚舉的相關資料,幫助大家更好的理解和學習c++11,感興趣的朋友可以了解下
    2020-08-08
  • C語言實現經典24點紙牌益智游戲

    C語言實現經典24點紙牌益智游戲

    這篇文章主要為大家詳細介紹了C語言實現經典24點紙牌益智游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Visual Studio 如何創(chuàng)建C/C++項目問題

    Visual Studio 如何創(chuàng)建C/C++項目問題

    這篇文章主要介紹了Visual Studio 如何創(chuàng)建C/C++項目問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 基于C++的拼多多算法在線筆試題示例

    基于C++的拼多多算法在線筆試題示例

    這篇文章主要介紹了基于C++的拼多多算法在線筆試題,列舉了四個拼多多的算法筆試題,包括分治法、大數相乘、貪心算法以及迷宮問題,需要的朋友可以參考下
    2017-08-08
  • C++實現猜數游戲

    C++實現猜數游戲

    這篇文章主要為大家詳細介紹了C++實現猜數游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 簡單了解C++語言中的二元運算符和賦值運算符

    簡單了解C++語言中的二元運算符和賦值運算符

    這篇文章主要介紹了C++語言中的二元運算符和賦值運算符,文中列出了可重載的運算符列表,需要的朋友可以參考下
    2016-01-01
  • c語言函數棧幀的創(chuàng)建和銷毀過程詳解

    c語言函數棧幀的創(chuàng)建和銷毀過程詳解

    我們知道c語言中函數都是被調用的,main函數里面能調用其他函數,其實main函數也是被別的函數調用的,下面通過本文給大家分享c語言函數棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2021-08-08

最新評論

合山市| 遂平县| 东山县| 建瓯市| 七台河市| 潼南县| 天峻县| 萨嘎县| 庆阳市| 余姚市| 綦江县| 镇原县| 墨脱县| 斗六市| 罗源县| 柳江县| 绥德县| 马公市| 黔南| 伊宁市| 闸北区| 朔州市| 阿拉善右旗| 永泰县| 张掖市| 无锡市| 讷河市| 阳泉市| 黔南| 正蓝旗| 十堰市| 长春市| 当雄县| 昭苏县| 婺源县| 常宁市| 穆棱市| 方正县| 城口县| 松潘县| 高密市|