《编程珠玑》笔记3 数据结构选择
這一章主要討論良好的數(shù)據(jù)結(jié)構(gòu)對(duì)程序的重要影響
1.調(diào)查程序:問題的關(guān)鍵是決定怎樣用數(shù)組來存儲(chǔ)哪些數(shù)據(jù)。
格式信函編程:(更像是腳本程序所使用的形式)
對(duì)于一段應(yīng)用較多的程序,只有個(gè)別變量與外界輸入有關(guān),可以將這些變量以特定的參數(shù)來表示,建立一個(gè)模板,然后使用特定的發(fā)生器來解釋這個(gè)模板。如:
? 一個(gè)模板(schema)類似如下:
Welcome back, $1!we hope you have fun in the holidaywith $0 family.It will take $$120.your address: $2 $3date: $4? 一個(gè)發(fā)生器如下:(對(duì)于模板中的$符號(hào),用$$來表示)
read fields from databasefor start to end in schemac=getchar in schemaif(c != '$')printchar celsec = getchar in schemacase c:'$': printchar '$';'0'-'9': printstring field[c];default: error("bad schema")2.一組示例
菜單:考慮如下類型代碼:
void button0_clicked(){item0.checked = 1;item1.checked = 0;item2.checked = 0;}void button1_clicked(){item0.checked = 0;item1.checked = 1;item2.checked = 0;}void button2_clicked(){item0.checked = 0;item1.checked = 0;item2.checked = 1;}??? 實(shí)際item可能會(huì)有更多,這些函數(shù)可以做如下簡(jiǎn)化(使用數(shù)組來代替這些item):
void button_clicked(int choice){for(i = 0; i < numchoices; i++)item[i].checked = 0;item[choice].checked = 1;}出錯(cuò)信息
日期函數(shù)
3.用于特殊數(shù)據(jù)的工具
超文本:(html格式文本)
名字-值對(duì):(多用于數(shù)據(jù)庫(kù)中)
數(shù)據(jù)庫(kù)
特定領(lǐng)域編程語言:如GUI,curses,openGL……這些都為特定目的的程序提供了豐富的函數(shù)庫(kù)支持
4.原理
使用數(shù)組編寫重復(fù)代碼;
封裝復(fù)雜結(jié)構(gòu)
盡可能使用高級(jí)工具
從數(shù)據(jù)結(jié)構(gòu)建立程序結(jié)構(gòu)
5.習(xí)題
5.1在每一稅率區(qū)間都有三個(gè)值:該區(qū)間的下界S, 基本稅收B,超過下界部分稅收E,設(shè)計(jì)一個(gè)(S,B,E)的數(shù)據(jù)結(jié)構(gòu),并按照S排序,通過二分搜索找到相應(yīng)的區(qū)間(或者直接順序搜索也可以,這樣就與if的效果相同),然后利用相應(yīng)的三元組計(jì)算tax。
5.2輸入為k,a1,……,ak,c1,……,ck+1,輸出為a1,……am.
由于只給出了遞歸式,只能先算出ak+1, ak+2,.....,am.
最好的辦法是使用一個(gè)長(zhǎng)為k的數(shù)組,自底向上計(jì)算,(有點(diǎn)像動(dòng)態(tài)規(guī)劃中自底向上一樣)這樣在計(jì)算后一個(gè)值能夠確保前面的值都已知。
如果使用一個(gè)遞歸程序,也就是說,在得到am時(shí),計(jì)算am-1,am-2,...,am-k,同樣遞歸計(jì)算am-1時(shí),再計(jì)算am-2,am-3,...am-k-1,(這就是自頂向下的方法)這樣會(huì)產(chǎn)生很多重復(fù)計(jì)算,效率很低。當(dāng)然,也可以先申請(qǐng)一個(gè)數(shù)組,使用備忘錄方法解決這一問題。
5.3大寫字母的圖形化表示
5.4
5.5
5.6
5.7
? 5.8
轉(zhuǎn)載于:https://www.cnblogs.com/dandingyy/archive/2012/09/01/2666988.html
總結(jié)
以上是生活随笔為你收集整理的《编程珠玑》笔记3 数据结构选择的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android应用崩溃的调试方法
- 下一篇: Streams全库复制