更新時(shí)間:2023-05-26 來源:黑馬程序員 瀏覽量:
計(jì)算機(jī)軟件的最終成果都是以程序的形式體現(xiàn)的,一個(gè)程序應(yīng)當(dāng)包含以下兩方面的內(nèi)容:
(1)對(duì)數(shù)據(jù)的描述。在程序中指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,也就是數(shù)據(jù)結(jié)構(gòu)。
(2)對(duì)數(shù)據(jù)操作的描述。即操作步驟,也就是算法。
數(shù)據(jù)結(jié)構(gòu)是算法的基礎(chǔ),算法是數(shù)據(jù)結(jié)構(gòu)的靈魂。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和算法分析的目的是設(shè)計(jì)更好的程序,程序的本質(zhì)是為要處理的問題選擇好的數(shù)據(jù)結(jié)構(gòu),同時(shí)在此結(jié)構(gòu)上施加一種好的算法。
對(duì)于一個(gè)程序來說,數(shù)據(jù)是原料。一個(gè)程序所要進(jìn)行的計(jì)算或處理總是以某些數(shù)據(jù)為對(duì)象,將這些松散無組織的數(shù)據(jù)組織成一個(gè)數(shù)據(jù)結(jié)構(gòu),算法操作的就是這些數(shù)據(jù)結(jié)的設(shè)計(jì)和選擇要結(jié)合數(shù)據(jù)結(jié)構(gòu),簡單地說,數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)就是選擇存儲(chǔ)方式,如確定問題中的信息是用數(shù)據(jù)存儲(chǔ)還是普通的變量存儲(chǔ)或其他更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。算法設(shè)計(jì)的實(shí)質(zhì)是為實(shí)際問題要處理的數(shù)據(jù)選擇一種恰當(dāng)?shù)拇鎯?chǔ)結(jié)構(gòu),并在選定的存儲(chǔ)結(jié)構(gòu)上設(shè)計(jì)一個(gè)好的算法,因?yàn)橐粋€(gè)數(shù)據(jù)結(jié)構(gòu)會(huì)對(duì)應(yīng)多種不同的算法,此時(shí)就要利用時(shí)間復(fù)雜度與空間復(fù)雜度來選擇一個(gè)最優(yōu)算法。不同的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)將對(duì)應(yīng)差異很大的算法。
數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)會(huì)影響算法的好壞,因此在選擇存儲(chǔ)結(jié)構(gòu)時(shí),也要考慮其對(duì)算法的影響。例如,如果存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)能力較強(qiáng),則可以存儲(chǔ)較多的信息,算法將會(huì)好設(shè)計(jì)一些。反之,對(duì)于過于簡單的數(shù)據(jù)結(jié)構(gòu),于該結(jié)構(gòu)的算法設(shè)計(jì)可能會(huì)比較復(fù)雜一些。另外,數(shù)據(jù)結(jié)構(gòu)是算法操作的基礎(chǔ),其選擇要充分考慮算法的各種操作,與算法的操作相適應(yīng)。
算法通常是決定程序效率的關(guān)鍵,但一切算法最終都要在相應(yīng)的數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn),許多算法的精髓就是在于選擇了合適的數(shù)據(jù)結(jié)構(gòu)作為基礎(chǔ)。在程序設(shè)計(jì)中,不但要注重算法設(shè)計(jì),也要正確選擇數(shù)據(jù)結(jié)構(gòu),這樣往往能夠事半功倍。