数据结构-数组
數(shù)組概念:
數(shù)組是一種線性表數(shù)據(jù)結(jié)構(gòu),它用一組連續(xù)的內(nèi)存空間,來存儲(chǔ)一組具有相同類型結(jié)構(gòu)的數(shù)據(jù)。
關(guān)鍵詞:
線性:顧名思義,線性表就是數(shù)據(jù)排成像一條線一樣的數(shù)據(jù)結(jié)構(gòu)。每個(gè)線性表上的數(shù)據(jù)最多只有前后兩個(gè)方向。其實(shí)除了數(shù)組,鏈表,隊(duì)列,棧等也是線性表結(jié)構(gòu)
而與它相對(duì)立的概念就是非線性表,比如說二叉樹,堆,圖。之所以叫非線性,是因?yàn)?#xff0c;在非線性表中,數(shù)據(jù)之間并不是簡(jiǎn)單的前后關(guān)系。
第二個(gè)是連續(xù)的內(nèi)存空間和相同類型的數(shù)據(jù)。正是因?yàn)檫@兩個(gè)限制,它才有了一個(gè)堪稱“殺手锏”的特性:“隨機(jī)訪問”。但有利就有弊,隨機(jī)訪問對(duì)應(yīng)的就是查詢很快,但是當(dāng)插入和刪除的時(shí)候,為了保證連續(xù)性,需要對(duì)數(shù)據(jù)進(jìn)行大量的遷移工作。
接下來我們來看下插入操作
數(shù)組長度為n,現(xiàn)在我們要將一個(gè)數(shù)據(jù)插入到數(shù)組中的第k個(gè)位置。為了把第k個(gè)位置空出來,就需要把k后面所有的數(shù)據(jù)依次往后面移動(dòng)一位,如果我們是在數(shù)組開頭插入數(shù)據(jù),那么就需要把所有的數(shù)據(jù)都順序往后面移動(dòng),這個(gè)時(shí)候時(shí)間復(fù)雜度就是O(n),如果是在數(shù)組末尾插入一個(gè)數(shù)據(jù),那么就不需要移動(dòng)數(shù)據(jù),時(shí)間復(fù)雜度就是O(1),所以最壞情況下的時(shí)間復(fù)雜度是O(n),
最好情況下的時(shí)間復(fù)雜度是O(1),但是其實(shí)在真正的工作當(dāng)中,出現(xiàn)這兩種情況的幾率很小,大多數(shù)都是在數(shù)組開頭到結(jié)尾的位置插入數(shù)據(jù),那么平均算下來時(shí)間復(fù)雜度就是O(n)。
我們?cè)賮砜?strong>刪除操作
跟插入數(shù)據(jù)類似,如果我們要?jiǎng)h除第k個(gè)位置的數(shù)據(jù),為了內(nèi)存的連續(xù)性,也需要搬移數(shù)據(jù),不然中間就會(huì)出現(xiàn)空洞,內(nèi)存就不連續(xù)了。
和插入類似,如果刪除數(shù)組末尾的數(shù)據(jù),則最好情況時(shí)間復(fù)雜度為O(1),如果刪除開頭的數(shù)據(jù),則最壞情況時(shí)間復(fù)雜度為O(n);平均情況時(shí)間復(fù)雜度也為O(n)。
實(shí)際上在某些特殊情況下,我們并不一定非得追求數(shù)組中數(shù)據(jù)的連續(xù)性。如果我們將多次刪除操作集中在一起執(zhí)行,刪除的效率是不是會(huì)提高很多呢?
數(shù)組a[10]中存儲(chǔ)了8個(gè)元素:a,b,c,d,e,f,g,h?,F(xiàn)在我們要依次刪除a,b,c三個(gè)元素
為了避免搬移三次數(shù)據(jù),我們可以給這三個(gè)數(shù)據(jù)打上已刪除的標(biāo)示,當(dāng)數(shù)組沒有更多空間存儲(chǔ)數(shù)據(jù)時(shí),我們?cè)谟|發(fā)一次真正的刪除操作,這樣就大大減少了刪除操作導(dǎo)致的數(shù)據(jù)搬移。
內(nèi)容小結(jié)
我們今天學(xué)習(xí)了數(shù)組。它可以說是最基礎(chǔ),最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)了。數(shù)組用一塊連續(xù)的內(nèi)存空間,來存儲(chǔ)相同類型的一組數(shù)據(jù),最大的特點(diǎn)就是支持隨機(jī)訪問,但插入,刪除操作也因此變得比較低效,平均情況時(shí)間復(fù)雜度為O(n)。在平時(shí)的業(yè)務(wù)開發(fā)中,我們可以直接使用編程語言中提供的容器類,但是,如果是特別底層的開發(fā),直接使用數(shù)組可能會(huì)更合適。
了解更多:https://www.toutiao.com/c/user/83293539887/#mid=1633933053814798轉(zhuǎn)載于:https://www.cnblogs.com/sjks/p/10889483.html
總結(jié)
- 上一篇: stm32f405xx.h头文件的问题U
- 下一篇: MySQL临时表