《算法:C语言实现》—— 第二部分 —— 第3章 —— 基本数据结构
3.1 構(gòu)建組件
類(lèi)型允許我們指定如何利用特定位的各種操作,函數(shù)允許我們指定在數(shù)據(jù)上所進(jìn)行的操作。
利用C結(jié)構(gòu)(structure)類(lèi)型把各種不同類(lèi)型的信息集成在一起,并利用指針(pointer)間接引用這些信息。
在C語(yǔ)言中,程序都是由幾種基本數(shù)據(jù)類(lèi)型構(gòu)建的:
· 整數(shù)(ints)
· 浮點(diǎn)數(shù)(floats)
· 字符(chars)
定義3.1 數(shù)據(jù)類(lèi)型是值的集合和在這些值上的操作集。
操作關(guān)聯(lián)類(lèi)型,反之不成立。當(dāng)我們執(zhí)行一個(gè)操作時(shí),我們必須確保操作數(shù)和結(jié)果有正確類(lèi)型。忽略這一點(diǎn)是程序設(shè)計(jì)的常見(jiàn)錯(cuò)誤。在某些情況下,C語(yǔ)言程序可以進(jìn)行隱式的類(lèi)型轉(zhuǎn)換,而在其它一些情況下,我們利用顯式的類(lèi)型轉(zhuǎn)換(cast)。
例如,如果x和N是整數(shù),則表達(dá)式:((float)x)/N中包含兩種類(lèi)型轉(zhuǎn)換,(float)是一種顯式轉(zhuǎn)換,把x的值轉(zhuǎn)換為浮點(diǎn)類(lèi)型,接著用C語(yǔ)言中隱式類(lèi)型轉(zhuǎn)換規(guī)則對(duì)N進(jìn)行隱式轉(zhuǎn)換,使除法操作符的兩個(gè)參數(shù)都變味浮點(diǎn)數(shù)。
數(shù)據(jù)類(lèi)型的概念不局限于內(nèi)置的整數(shù)、浮點(diǎn)數(shù)和字符類(lèi)型。作為一種組織軟件的高效方式,我們還定義自己的數(shù)據(jù)類(lèi)型。
當(dāng)定義C語(yǔ)言中的一個(gè)簡(jiǎn)單函數(shù)時(shí),就高效地創(chuàng)造了一種新的數(shù)據(jù)類(lèi)型,其中函數(shù)實(shí)現(xiàn)的操作添加到用該函數(shù)參數(shù)表示的數(shù)據(jù)類(lèi)型定義的操作中。
實(shí)際上,每個(gè)C程序在某種意義上都是一種數(shù)據(jù)類(lèi)型,也就是說(shuō),是數(shù)值集合(內(nèi)置類(lèi)型或其它類(lèi)型)及其相關(guān)操作(函數(shù))的一個(gè)列表。
程序3.1 函數(shù)定義
#include <stdio.h> int lg(int); int main() {int i,N;for(i=1,N=10;i<=6;i++,N*=10){printf("%7d %2d %9d \n",N,lg(N),N*lg(N));} } int lg(int N) {int i;for(i=0;N>0;i++,N/=2);return i; }在C語(yǔ)言中用于實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行新操作的機(jī)制就是函數(shù)定義。
所有函數(shù)都有一個(gè)參數(shù)列表和可能的一個(gè)返回值。
通過(guò)給出函數(shù)名和它的返回值類(lèi)型來(lái)說(shuō)明(declare)函數(shù)。
在函數(shù)定義中,對(duì)變量命名(稱(chēng)為參數(shù)),并根據(jù)這些名字表達(dá)計(jì)算,把它們作為局部變量看待。
當(dāng)調(diào)用函數(shù)時(shí),這些變量初始化為參數(shù)傳遞的值,接著執(zhí)行函數(shù)代碼。
return語(yǔ)句是函數(shù)執(zhí)行結(jié)束的指令,它還向調(diào)用函數(shù)返回值。
原則上,調(diào)用函數(shù)不受其他函數(shù)的影響,但也有很多例外情況。
定義和聲明的分開(kāi)為組織程序提供了靈活性。
在寫(xiě)程序時(shí),目標(biāo)是組成程序,以使重用舊程序解決新問(wèn)題。
首先,通過(guò)仔細(xì)了解和準(zhǔn)確確定程序所使用的操作,可以容易地把它擴(kuò)展到支持這些操作的任意的數(shù)據(jù)類(lèi)型上。
其次,通過(guò)仔細(xì)了解和準(zhǔn)確確定程序的作用,可以把它執(zhí)行的抽象操作添加到求解新問(wèn)題所用的操作中。
程序3.2 數(shù)字類(lèi)型
備受推薦的軟件工程實(shí)踐是把程序分為三個(gè)文件:
· 一個(gè)接口(interface),定義了數(shù)據(jù)結(jié)構(gòu)以及聲明用于操作這個(gè)數(shù)據(jù)結(jié)構(gòu)的函數(shù)。
· 在接口中聲明的函數(shù)的一個(gè)實(shí)現(xiàn)(implementation)。
· 一個(gè)客戶(hù)(client)程序,調(diào)用接口中聲明的函數(shù),以便在更高抽象層次上使用。
結(jié)構(gòu)體是集合類(lèi)型,用于定義數(shù)據(jù)的集合,以便將整個(gè)集合作為一個(gè)單元來(lái)操縱,但仍可以通過(guò)一個(gè)給定數(shù)據(jù)集的個(gè)體成員的名字來(lái)引用它。
總結(jié)
以上是生活随笔為你收集整理的《算法:C语言实现》—— 第二部分 —— 第3章 —— 基本数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Broken Keyboard (a.k
- 下一篇: 算法训练 审美课