但凡IT江湖俠士,算法與數(shù)據(jù)結(jié)構(gòu)為必修之課。早有前輩已經(jīng)明確指出:程序=算法+數(shù)據(jù)結(jié)構(gòu) 。要想在之后的江湖歷練中通關(guān),數(shù)據(jù)結(jié)構(gòu)必不可少。數(shù)據(jù)結(jié)構(gòu)與算法相輔相成,亦是陰陽互補(bǔ)之法。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)大興安嶺,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
說道數(shù)組,幾乎每個(gè)IT江湖人士都不陌生,甚至過半人還會(huì)很自信覺的它很簡單。
的確,在菜菜所知道的編程語言中幾乎都會(huì)有數(shù)組的影子。不過它不僅僅是一種基礎(chǔ)的數(shù)據(jù)類型,更是一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。如果你覺的對(duì)數(shù)組足夠了解,那能不能回答一下:
所謂數(shù)組,是相同的元素序列。數(shù)組是在程序設(shè)計(jì)中,為了處理方便,把具有相同類型的若干元素按無序的形式組織起來的一種形式。
正如以上所述,數(shù)組在應(yīng)用上屬于數(shù)據(jù)的容器。不過我還是要補(bǔ)充兩點(diǎn):
有線性結(jié)構(gòu)當(dāng)然就有非線性結(jié)構(gòu),比如之后我們要介紹的二叉樹,圖 等等,這里不再展開~~~
我相信所有人在使用數(shù)組的時(shí)候都知道數(shù)組可以按照下標(biāo)來訪問,例如 array[1] 。作為一種最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)是什么使數(shù)組具有這樣的隨機(jī)訪問方式呢?天性聰慧的你可能已經(jīng)想到了:內(nèi)存連續(xù)+相同數(shù)據(jù)類型。
現(xiàn)在我們抽象一下數(shù)據(jù)在內(nèi)存上分配的情景。
array[n]=array[0]+size*n
以上是元素地址的運(yùn)算,其中size為每個(gè)元素的大小,如果為int類型數(shù)據(jù),那size就為4個(gè)字節(jié)。其實(shí)確切的說,n的本質(zhì)是一個(gè)離首元素的偏移量,所以array[n]就是距離首元素n個(gè)偏移量的元素,因此計(jì)算array[n]的內(nèi)存地址只需以上公式。
論證一下,如果下標(biāo)從1開始計(jì)算,那array[n]的內(nèi)存地址計(jì)算公式就會(huì)變?yōu)椋?/p>
array[n]=array[0]+size*(n-1)
對(duì)比很容易發(fā)現(xiàn),從1開始編號(hào)比從0開始編號(hào)每次獲取內(nèi)存地址都多了一次 減法運(yùn)算,也就多了一次cpu指令的運(yùn)行。這也是數(shù)組從0下標(biāo)開始訪問一個(gè)原因。
其實(shí)還有一種可能性,那就是所有現(xiàn)代編程語言的鼻祖:C語言,它是從0開始計(jì)數(shù)下標(biāo)的,所以現(xiàn)在所有衍生出來的后代語言也就延續(xù)了這個(gè)傳統(tǒng)。雖然不符合人類的思想,但是符合計(jì)算機(jī)的原理。當(dāng)然也有一些語言可以設(shè)置為不從下標(biāo)0開始計(jì)算,這里不再展開,有興趣的可以去搜索一下。
當(dāng)然這里有一個(gè)技巧:如果你的業(yè)務(wù)要求并不是數(shù)組連續(xù)有序的,當(dāng)在位置k插入元素的時(shí)候,只需要把k元素轉(zhuǎn)移到數(shù)組末尾,新元素插入到k位置即可。當(dāng)然仔細(xì)沉思一下這種業(yè)務(wù)場(chǎng)景可能性太小了,數(shù)組都可以無序,我直接插入末尾即可,沒有必要非得在k位置插入把。~~
當(dāng)然還有一個(gè)特殊場(chǎng)景:如果是多次連續(xù)的k位置插入操作,我們完全可以合并為一次“批量插入”操作:把k之后的元素整體移動(dòng)sum(插入次數(shù))個(gè)位置,無需一個(gè)個(gè)位置移動(dòng),把三次操作的時(shí)間復(fù)雜度合并為一次。
與插入對(duì)應(yīng)的就有刪除操作,同理,刪除操作數(shù)組為了保持連續(xù)性,也需要元素的移動(dòng)。
綜上所述,數(shù)組在添加和刪除元素的場(chǎng)景下劣勢(shì)比較明顯,所以在具體業(yè)務(wù)場(chǎng)景下應(yīng)該避免頻繁添加和刪除的操作。
我們學(xué)習(xí)的每個(gè)數(shù)據(jù)結(jié)構(gòu)其實(shí)都有對(duì)應(yīng)的適合場(chǎng)景,只不過是場(chǎng)景多少的問題,具體什么時(shí)候用,需要我們對(duì)該數(shù)據(jù)結(jié)構(gòu)的特性做深入分析。
關(guān)于數(shù)組的特性,通過以上介紹可以知道最大的一個(gè)亮點(diǎn)就是按照下標(biāo)訪問,那有沒有具體業(yè)務(wù)映射這種特性呢?
添加關(guān)注,查看更精美版本,收獲更多精彩
網(wǎng)站題目:程序猿修仙之路--數(shù)據(jù)結(jié)構(gòu)之你是否真的懂?dāng)?shù)組?
文章分享:http://www.chinadenli.net/article32/goccsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、全網(wǎng)營銷推廣、建站公司、企業(yè)建站、品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)