- 相關(guān)推薦
從宏觀上理解數(shù)據(jù)結(jié)構(gòu)
1.數(shù)據(jù)結(jié)構(gòu)對(duì)編程為什么如此重要?
現(xiàn)在就根據(jù)我自己的體會(huì)來(lái)為大家闡述一下數(shù)據(jù)結(jié)構(gòu)對(duì)我們編程為什么如此重要。記得在開(kāi)始學(xué)習(xí)編程的時(shí)候,對(duì)數(shù)據(jù)結(jié)構(gòu)沒(méi)什么概念,感覺(jué)編程就是那么回事,不用數(shù)據(jù)結(jié)構(gòu)也能編出一大堆程序,然而我只能說(shuō)那都是些小孩子過(guò)家家玩的小程序而已,程序中幾乎沒(méi)有用到多少數(shù)據(jù),無(wú)論你怎么存儲(chǔ),程序運(yùn)行起來(lái)都是很快的。然而當(dāng)你為工程應(yīng)用去編寫(xiě)程序的時(shí)候,那都是處理大批的數(shù)據(jù),那時(shí)候就不能隨便亂存儲(chǔ)數(shù)據(jù)了,必須根據(jù)實(shí)際情況選擇一種合適的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),從而能夠大大提高數(shù)據(jù)的處理效率。舉個(gè)例子,我們平時(shí)經(jīng)常用到的排序也算是對(duì)數(shù)據(jù)的處理,我們選擇不同的排序算法效率是不同的,當(dāng)數(shù)據(jù)量很小時(shí),我們感覺(jué)不出它們的差異,然而當(dāng)我們對(duì)大量數(shù)據(jù)進(jìn)行排序時(shí)就能感覺(jué)出它們的效率來(lái)。當(dāng)然在排序時(shí)排序策略是很重要的,然而這些策略有時(shí)是依賴于必要的數(shù)據(jù)結(jié)構(gòu)的。如插入排序、選擇排序、快速排序等可能依賴的只是線性表,而堆排序就依賴于堆了。因此選擇一種好的數(shù)據(jù)結(jié)構(gòu)可能會(huì)大大提高程序的運(yùn)行效率,而且解決問(wèn)題時(shí)的某中策略可能也要依賴于具體的數(shù)據(jù)結(jié)構(gòu)。
2.什么是數(shù)據(jù)結(jié)構(gòu)?
我們知道了數(shù)據(jù)結(jié)構(gòu)對(duì)編程的重要性,那究竟什么是數(shù)據(jù)結(jié)構(gòu)呢?首先來(lái)看一下數(shù)據(jù)結(jié)構(gòu)誕生的目的。在現(xiàn)實(shí)世界中存在著大量的數(shù)據(jù),而這些數(shù)據(jù)不管以何種方式存儲(chǔ),都需要使用一種結(jié)構(gòu)來(lái)表示,而這種結(jié)構(gòu)不僅能夠表示數(shù)據(jù)元素本身,還能夠表示數(shù)據(jù)元素之間的關(guān)系,最好這種結(jié)構(gòu)還能占據(jù)較少的存儲(chǔ)空間。然而這里所說(shuō)的數(shù)據(jù)結(jié)構(gòu)也只能說(shuō)是數(shù)據(jù)的邏輯結(jié)構(gòu),即它只是抽象的存在于我們的腦海中,而在具體的存儲(chǔ)中還需要將這種邏輯結(jié)構(gòu)用現(xiàn)實(shí)事物表示出來(lái)。由于我們的計(jì)算機(jī)大部分功能都跟存儲(chǔ)數(shù)據(jù)和處理數(shù)據(jù)有關(guān),因此計(jì)算機(jī)作為數(shù)據(jù)的載體與數(shù)據(jù)結(jié)構(gòu)的關(guān)系也就相當(dāng)大了,計(jì)算機(jī)就可以根據(jù)我們要求的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)了。至此,我們可以給數(shù)據(jù)結(jié)構(gòu)下一個(gè)比較學(xué)術(shù)的定義:數(shù)據(jù)結(jié)構(gòu)是用來(lái)描述數(shù)據(jù)元素集合及各個(gè)數(shù)據(jù)元素之間關(guān)系的邏輯結(jié)構(gòu)。當(dāng)然在很多數(shù)據(jù)結(jié)構(gòu)的書(shū)籍中對(duì)數(shù)據(jù)結(jié)構(gòu)的定義是不同的,有的書(shū)籍將對(duì)數(shù)據(jù)結(jié)構(gòu)處理的簡(jiǎn)單運(yùn)算也歸為數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,當(dāng)然這看你如何理解了,畢竟數(shù)據(jù)結(jié)構(gòu)和算法是不分家的。
3.計(jì)算機(jī)描述數(shù)據(jù)的方式
前邊描述了什么是數(shù)據(jù)結(jié)構(gòu),那計(jì)算機(jī)都可以通過(guò)哪些基本的手段來(lái)描述我們的數(shù)據(jù)呢?首先我們知道在計(jì)算機(jī)中大部分?jǐn)?shù)據(jù)都存在于磁盤(pán)上和內(nèi)存里,而CPU處理數(shù)據(jù)又必須將數(shù)據(jù)從磁盤(pán)讀取到內(nèi)存中,由于內(nèi)存資源比較珍貴,我們采取合適的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中存儲(chǔ)數(shù)據(jù)以節(jié)省內(nèi)存空間是必要的。談到內(nèi)存對(duì)數(shù)據(jù)的存儲(chǔ),我們程序員都應(yīng)該知道,我們的程序在計(jì)算機(jī)上運(yùn)行需要一定的內(nèi)存空間,該空間可以簡(jiǎn)單分為代碼區(qū)和數(shù)據(jù)區(qū)。代碼區(qū)是存放我們程序代碼的地方,那部分空間我們無(wú)法管理。但是數(shù)據(jù)區(qū)是存放我們程序需要處理的數(shù)據(jù)的地方,而我們就是采取合理的方式將數(shù)據(jù)存儲(chǔ)到那個(gè)地方。
我們都知道計(jì)算機(jī)管理內(nèi)存的方式為每個(gè)字節(jié)的空間賦予一個(gè)地址,這樣我們就可以通過(guò)地址來(lái)訪問(wèn)內(nèi)存的數(shù)據(jù)了。當(dāng)我們存放數(shù)據(jù)時(shí),我們可以通過(guò)將數(shù)據(jù)存放到指定地址的空間中去,當(dāng)我們?nèi)?shù)據(jù)時(shí),可以根據(jù)地址找到相應(yīng)的數(shù)據(jù),這種方式稱為直接尋址方式;另外還有間接尋址方式,這種方式我們通過(guò)地址找到的數(shù)據(jù)不是數(shù)據(jù)本身,而是數(shù)據(jù)存放的位置,通過(guò)它再去找才能找到真正的數(shù)據(jù),當(dāng)然,間接尋址可以間接很多次,這就是多維指針的由來(lái)。說(shuō)了大半天的直接尋址和間接尋址,那跟數(shù)據(jù)結(jié)構(gòu)有什么關(guān)系呢?當(dāng)然有關(guān)系了,因?yàn)檫@是計(jì)算機(jī)組織數(shù)據(jù)的兩種最基本的方式,正是通過(guò)這兩種基本方式,我們的數(shù)據(jù)才被存放到內(nèi)存中,而存放的時(shí)候可能是連續(xù)的地址空間,也可能是離散的地址空間。正因?yàn)檫@樣,才出現(xiàn)了計(jì)算機(jī)對(duì)數(shù)據(jù)的不同描述形式。常見(jiàn)的描述形式有:公式化描述、鏈表描述、間接描述和模擬指針。
公式化描述是通過(guò)公式計(jì)算出元素的位置,從而能夠直接訪問(wèn)到這個(gè)元素。但這種描述方式必須保證所使用的空間是連續(xù)的,因?yàn)橹挥羞B續(xù)的地址空間,才能通過(guò)一個(gè)固定的偏移量一次找到數(shù)據(jù)的地址。就拿各種編程語(yǔ)言實(shí)現(xiàn)的數(shù)組來(lái)說(shuō),每個(gè)數(shù)組都有一個(gè)連續(xù)的空間,而數(shù)組名又標(biāo)志著這個(gè)連續(xù)空間的首地址,因此若想訪問(wèn)這個(gè)數(shù)組的某個(gè)元素直接通過(guò)首地址加偏移量就找到了。因此數(shù)組就是一種公式化描述的數(shù)據(jù)結(jié)構(gòu),描述公式為f(i)=location(i-1),其中i是表示數(shù)組中的第幾個(gè)元素。對(duì)于多維數(shù)組,內(nèi)存中實(shí)際也是一個(gè)連續(xù)的空間,只不過(guò)編譯器也是以公式化的方式來(lái)描述這個(gè)數(shù)據(jù)結(jié)構(gòu)的,如在C++中是采用行主映射方式來(lái)映射的,二維數(shù)組的公式為f(i,j)=i*n+j;其中i表示行號(hào),j表示列號(hào),n表示列數(shù)。當(dāng)然采用公式化描述的數(shù)據(jù)結(jié)構(gòu)有很多,如散列表、完全二叉樹(shù)等,這種描述方式優(yōu)點(diǎn)就是很多情況能夠節(jié)省空間,并且提高訪問(wèn)數(shù)據(jù)的速度。但這種描述方式也有缺點(diǎn)就是經(jīng)常受限,畢竟很多問(wèn)題是用公式?jīng)]法描述的;還有通過(guò)公式化描述需要連續(xù)的空間有時(shí)也顯得不夠靈活。例如對(duì)數(shù)據(jù)的插入刪除操作需要移動(dòng)數(shù)據(jù)。
鏈表描述方式是將數(shù)據(jù)存儲(chǔ)在離散的空間上,既然空間是離散的,那通過(guò)固定的偏移量就沒(méi)法訪問(wèn)元素了。因此可將每個(gè)元素的地址保存到上一個(gè)元素中,這樣就形成了鏈表。鏈表由于采用了離散存儲(chǔ),因此在有些數(shù)據(jù)操作上就顯得比較靈活。但這也導(dǎo)致了它的不足,比如說(shuō)不能隨機(jī)訪問(wèn)某個(gè)節(jié)點(diǎn),另外還占用了額外的指針空間等。
間接描述方式是將數(shù)據(jù)的地址保存到一張表中,實(shí)際的數(shù)據(jù)離散的存儲(chǔ)在內(nèi)存中,當(dāng)需要訪問(wèn)數(shù)據(jù)時(shí),首先查找表找到數(shù)據(jù)的地址然后再去訪問(wèn)實(shí)際數(shù)據(jù)。這種描述方式很多時(shí)候是公式化描述和鏈表描述方式的結(jié)合。當(dāng)實(shí)際的數(shù)據(jù)元素比較大時(shí)是適合用這種方式來(lái)描述的。
模擬指針這種方式是通過(guò)用整數(shù)來(lái)模擬指針訪問(wèn)數(shù)據(jù),也算是離散存儲(chǔ)在內(nèi)存中,但這種離散是限定在一定范圍內(nèi)的,因?yàn)槲覀冊(cè)趯?shí)現(xiàn)模擬指針時(shí)需要申請(qǐng)一塊連續(xù)的空間模擬堆區(qū),并根據(jù)實(shí)際需要將這塊連續(xù)的空間重新編號(hào),以便使用整數(shù)表示它的地址。與此同時(shí)還要維護(hù)兩個(gè)鏈表,空閑鏈表和有數(shù)據(jù)的鏈表。這相當(dāng)于我們替操作系統(tǒng)為程序分配內(nèi)存的工作。
4.各種數(shù)據(jù)結(jié)構(gòu)的宏觀理解
為了便于將各種數(shù)據(jù)結(jié)構(gòu)聯(lián)系起來(lái),本人對(duì)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)分為了三大類(lèi):線性表,樹(shù),圖。萬(wàn)變不離其宗,其他的數(shù)據(jù)結(jié)構(gòu)都是在這三種上根據(jù)實(shí)際需要進(jìn)行的擴(kuò)展。當(dāng)然,如果三大類(lèi)還覺(jué)得有點(diǎn)多,那就再來(lái)個(gè)萬(wàn)劍歸綜到圖,任何數(shù)據(jù)結(jié)構(gòu)都可以說(shuō)成是圖,不過(guò)各有各的特點(diǎn)罷了。下面就針對(duì)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)在三大類(lèi)上進(jìn)行分析,由于本文只是從宏觀上理解數(shù)據(jù)結(jié)構(gòu),因此對(duì)各種數(shù)據(jù)結(jié)構(gòu)所實(shí)現(xiàn)的細(xì)節(jié)不會(huì)做太多的說(shuō)明,想要了解可參看數(shù)據(jù)結(jié)構(gòu)的相關(guān)書(shū)籍。
4.1線性表
線性表的數(shù)據(jù)結(jié)構(gòu)有很多,如數(shù)組、矩陣、鏈表、堆棧、隊(duì)列、跳表、散列表等。一維數(shù)組是典型的線性表,多維數(shù)組可以看成是多個(gè)線性表的組合,數(shù)組的描述方式一般采用公式化描述方式。對(duì)于矩陣可以看成是二維數(shù)組,但是由于矩陣有很多種,比如三角矩陣,稀疏矩陣,像對(duì)這樣矩陣的描述為了節(jié)省空間,可采用合理的描述方式,如采用鏈表的方式,只將非零元素保存到節(jié)點(diǎn)上。堆棧和隊(duì)列實(shí)際上是對(duì)線性表添加某種限制而形成的, 堆棧是后進(jìn)先出,隊(duì)列是先進(jìn)先出,實(shí)際上它們是一種特殊的優(yōu)先隊(duì)列,只不過(guò)對(duì)優(yōu)先權(quán)的規(guī)定是不一樣的?梢允褂霉交枋鏊鼈円部梢允褂面湵砻枋鏊鼈儯切适遣煌。對(duì)于堆棧采取公式化描述是比較好的,進(jìn)出效率都為O(1),若用鏈表描述就顯得有點(diǎn)浪費(fèi)空間了,不過(guò)如果是多個(gè)堆棧的話,用鏈表描述是比較好的。對(duì)于隊(duì)列適合用鏈表來(lái)描述,因?yàn)閷?duì)于鏈表無(wú)論是從頭部添加元素還是從尾部刪除元素效率都是O(1),然而如果采用公式化描述的話,每次刪除需要移動(dòng)元素,無(wú)疑增加了開(kāi)銷(xiāo)。
跳表和散列表是經(jīng)常用來(lái)描述字典的兩種數(shù)據(jù)結(jié)構(gòu)。字典常見(jiàn)的操作有查找、插入、刪除、按序輸出等。雖然字典也能用普通的數(shù)組鏈表實(shí)現(xiàn),但效率不高。跳表是對(duì)鏈表的一種改進(jìn)。鏈表本身優(yōu)點(diǎn)就是插入、刪除效率比數(shù)組高,然而查找效率低,因此可以通過(guò)添加額外的指針來(lái)提高查找效率。跳表的原理是根據(jù)二分查找的思想,我們知道在一個(gè)有序數(shù)組上二分查找的時(shí)間復(fù)雜度為O(logn),因此可以通過(guò)在有序鏈表上添加額外的指針來(lái)實(shí)現(xiàn)這樣的搜索方法。然而仔細(xì)分析,我們會(huì)發(fā)現(xiàn),要想實(shí)現(xiàn)真正的二分查找并非易事,因?yàn)樘碇械脑夭⒎鞘且怀刹蛔兊,因此該在哪個(gè)元素上添加額外的指針并且把該元素應(yīng)該視為幾級(jí)鏈表上的元素,都是不可預(yù)測(cè)的,因此這就增加了實(shí)現(xiàn)跳表的復(fù)雜度,在實(shí)際中可采用隨機(jī)的方式將某一個(gè)元素定為幾級(jí)鏈上的元素,具體的實(shí)現(xiàn)細(xì)節(jié)可參看數(shù)據(jù)結(jié)構(gòu)的相關(guān)書(shū)籍。
散列表是通過(guò)散列函數(shù)根據(jù)關(guān)鍵字來(lái)確定元素的位置,也算是公式化的描述方式。在理想情況下,散列表在查找、插入、刪除的時(shí)間復(fù)雜度都能達(dá)到O(1),然而在現(xiàn)實(shí)中由于關(guān)鍵字的變化范圍實(shí)在太大,理想散列表實(shí)現(xiàn)需要大量的空間,造成嚴(yán)重浪費(fèi),因此出現(xiàn)了可以將不同的關(guān)鍵字映射到同一位置的散列函數(shù),那么問(wèn)題就又來(lái)了,既然將不同的關(guān)鍵字映射到了同一位置,那么該如何處理這種沖突呢?處理這種沖突的兩種常見(jiàn)方式是線性開(kāi)型尋址散列和鏈表散列,線性開(kāi)型尋址散列是將相同關(guān)鍵字的元素盡可能的放到函數(shù)映射的位置上,如果該位置已存在,則向后查找最近的空桶;而鏈表散列是將沖突的元素放到一個(gè)鏈表上,這兩種方式各有自己的優(yōu)缺點(diǎn)。
對(duì)于描述字典的這兩種數(shù)據(jù)結(jié)構(gòu)進(jìn)行性能分析,跳表在最好狀態(tài)下查找、插入、刪除的時(shí)間復(fù)雜度都為O(k+logn)其中k為鏈的級(jí)數(shù),最差則為O(k+n),而對(duì)于采取了將多個(gè)關(guān)鍵字映射到同一位置的散列表來(lái)說(shuō),最好狀態(tài)下查找、插入、刪除的時(shí)間復(fù)雜度都為O(1),然而最差狀態(tài)卻達(dá)到O(n),這么來(lái)說(shuō)散列表是否都一直優(yōu)于跳表呢,當(dāng)然還得依賴于實(shí)際的問(wèn)題,例如在按序輸出時(shí),跳表明顯優(yōu)于散列表。
在線性表這幾種數(shù)據(jù)結(jié)構(gòu)中會(huì)發(fā)現(xiàn),他們都是對(duì)普通的線性表改造而成,有的是添加規(guī)則上的限制,有的是添加額外的輔助信息,還有的是對(duì)多個(gè)線性表的組合。但無(wú)論怎樣變化,終究還是線性表。因此我們?cè)趯?shí)際開(kāi)發(fā)中,可以根據(jù)不同數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)來(lái)選擇他們。
4.2樹(shù)
樹(shù)可以用來(lái)描述具有層次結(jié)構(gòu)的事物,樹(shù)這種結(jié)構(gòu)真是太神奇了,通過(guò)對(duì)樹(shù)添加不同的限制就形成了不同的數(shù)據(jù)結(jié)構(gòu)。如對(duì)只有左右孩子的樹(shù)我們稱之為二叉樹(shù),在二叉樹(shù)下通過(guò)添加各種限制又產(chǎn)生了很多數(shù)據(jù)結(jié)構(gòu),如完全二叉樹(shù)、堆、左高樹(shù)、AVL樹(shù)、紅黑樹(shù)、二叉搜索樹(shù)等。下面就來(lái)詳細(xì)描述一下這些關(guān)于樹(shù)的數(shù)據(jù)結(jié)構(gòu)。
首先考慮一個(gè)問(wèn)題在計(jì)算機(jī)內(nèi)存中為什么多采用二叉樹(shù)來(lái)存儲(chǔ)數(shù)據(jù),而不采用多叉樹(shù)呢?當(dāng)然也是為了提高速度處理效率,在搜索二叉樹(shù)的一個(gè)節(jié)點(diǎn)時(shí)當(dāng)然是比較的次數(shù)越少越好。試考慮在一個(gè)有序數(shù)組中進(jìn)行二分查找要比三分查找、四分查找乃至更多分的查找效率更高呢?這個(gè)問(wèn)題自然也就明白了。
完全二叉樹(shù)是對(duì)二叉樹(shù)結(jié)構(gòu)層次限制比較大的數(shù)據(jù)結(jié)構(gòu),那這種數(shù)據(jù)結(jié)構(gòu)有什么好處呢,其中一個(gè)好處是這種數(shù)據(jù)結(jié)構(gòu)采用公式化描述是非常方便的,而且大大的節(jié)省空間。
將完全二叉樹(shù)限制為最大樹(shù)就形成了堆,而堆這種數(shù)據(jù)結(jié)構(gòu)對(duì)于描述優(yōu)先隊(duì)列是非常高效的,使用堆來(lái)描述優(yōu)先隊(duì)列插入、刪除的效率都為O(logn),而且采用公式化描述的話非常節(jié)省空間。當(dāng)然優(yōu)先隊(duì)列還可以用線性表來(lái)描述,然而那畢竟是低效的。然而如果想將兩個(gè)優(yōu)先隊(duì)列合并,用堆來(lái)描述就非常低效了,就需要選擇另外一種數(shù)據(jù)結(jié)構(gòu)。左高樹(shù)是對(duì)左右子樹(shù)進(jìn)行優(yōu)先權(quán)限制的二叉樹(shù),至于選擇什么作為優(yōu)先權(quán)的評(píng)價(jià)因素,可以把高度作為評(píng)價(jià)因素,也可以把節(jié)點(diǎn)數(shù)量作為評(píng)價(jià)因素,那就分別形成了高度優(yōu)先左高樹(shù)和重量?jī)?yōu)先左高樹(shù)。之所以對(duì)左右的子樹(shù)進(jìn)行優(yōu)先權(quán)限制,那是因?yàn)檫M(jìn)行了這樣的限制后,將兩棵左高樹(shù)合并為一棵左高樹(shù)就很容易了。將左高樹(shù)再次添加最大樹(shù)的限制條件就形成了最大左高樹(shù),最大(小)左高樹(shù)同樣可以描述優(yōu)先隊(duì)列,而且適合兩棵樹(shù)的合并,不過(guò)在存儲(chǔ)效率方面不如堆節(jié)省空間了。
接下來(lái)討論一下搜索樹(shù),搜索樹(shù)是另一種可以描述字典的高效的數(shù)據(jù)結(jié)構(gòu)。先來(lái)分析一下二叉搜索樹(shù),二叉搜索樹(shù)是對(duì)二叉樹(shù)節(jié)點(diǎn)上的值進(jìn)行限制,要求每個(gè)節(jié)點(diǎn)的值比左子樹(shù)的值大并且比右子樹(shù)的小,加上這一限制,對(duì)某一元素的搜索效率就比較高了,在最好情況下查找,插入,刪除操作的時(shí)間復(fù)雜度都能夠達(dá)到O(logn),然而最壞情況下達(dá)到了O(n),導(dǎo)致最壞情況是由于二叉樹(shù)的極度不平衡造成的,為了解決這個(gè)問(wèn)題,平衡樹(shù)又摻和進(jìn)來(lái)了,平衡二叉搜索樹(shù)不就很好的解決了這個(gè)問(wèn)題嗎?然而在每次插入刪除操作后AVL樹(shù)為了維持平衡的特性需要進(jìn)行多次旋轉(zhuǎn),因而這又降低了效率。紅黑樹(shù)的出現(xiàn)就很好的解決了這個(gè)問(wèn)題,紅黑樹(shù)雖然不是完全平衡的二叉樹(shù)但也算的上是基本平衡,然而紅黑樹(shù)對(duì)于插入刪除操作后維持紅黑樹(shù)的特性花費(fèi)的代價(jià)并不高。在現(xiàn)實(shí)應(yīng)用中,很多字典都是用紅黑樹(shù)來(lái)進(jìn)行描述的。除了二叉搜索樹(shù),多叉搜索樹(shù)在很多地方也有應(yīng)用,例如在讀取磁盤(pán)數(shù)據(jù)時(shí),可以采用B-樹(shù)來(lái)建立索引,由于每次讀取磁盤(pán)花費(fèi)的代價(jià)比較大,因此讀取的磁盤(pán)次數(shù)越少越好,從理論上也就是說(shuō)樹(shù)的高度越矮越好。又如為了提高索引速度,很多數(shù)據(jù)庫(kù)采用B+樹(shù)建立索引。另外,由于英語(yǔ)單詞一般是用字母拼湊而成,因此將英語(yǔ)單詞存放在多叉樹(shù)中可以大大提高搜索單詞的效率,這就是著名的Trie樹(shù)。
通過(guò)以上對(duì)各種由樹(shù)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)來(lái)看,通過(guò)對(duì)樹(shù)添加各種限制來(lái)維持一種固定的數(shù)據(jù)結(jié)構(gòu)對(duì)解決某些特定的問(wèn)題是非常高效的,因此在現(xiàn)實(shí)應(yīng)用中,我們應(yīng)該根據(jù)實(shí)際的需要選擇合適的數(shù)據(jù)結(jié)構(gòu)或?qū)δ承⿺?shù)據(jù)結(jié)構(gòu)進(jìn)行改造,變成真正適合自己的數(shù)據(jù)結(jié)構(gòu)。
[從宏觀上理解數(shù)據(jù)結(jié)構(gòu)]
【從宏觀上理解數(shù)據(jù)結(jié)構(gòu)】相關(guān)文章:
商務(wù)英語(yǔ)宏觀經(jīng)濟(jì)詞匯08-23
商務(wù)英語(yǔ)宏觀經(jīng)濟(jì)詞匯(2)08-26
理解格言11-07
理解的名言10-24
理解的名言08-21
數(shù)據(jù)結(jié)構(gòu)第8章例題與答案06-18
數(shù)據(jù)結(jié)構(gòu)第9章例題與答案07-28
數(shù)據(jù)結(jié)構(gòu)第3章例題與答案08-25
理解名言警句08-14
《清明》古詩(shī)的理解07-14