




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——初步剖析C語言編程中的結(jié)構(gòu)體C語言布局體,可謂是C強大功能之一,也是C++語言之所以能衍生的有利條件,事實上,當(dāng)布局體中成員中有函數(shù)指針了后,那么,布局體也即C++中的類了。接待大家閱讀!更多相關(guān)信息請關(guān)注相關(guān)欄目!
C語言中,布局體的聲明、定義是用到關(guān)鍵字struct,就像聯(lián)合體用到關(guān)鍵字union、枚舉類型用到enum關(guān)鍵字一樣,事實上,聯(lián)合體、枚舉類型的用法幾乎是參照布局體來的。布局體的聲明格式如下:
structtag-namemember1;…memberN;;
因此,定義布局體變量的語句為:structtag-namevarible-name,如structpointpt;其中,point為tag-name,pt是布局體structpoint變量。當(dāng)然,也可以一次性聲明布局體類型和變量,即如下:structtag-name…x,y,z;就類似于intx,y,z;語句一樣。也可以在定義布局體變量時即賦初值,即變量初始化,structpointpt=320,200;
當(dāng)然,也就可以有布局體指針、布局體數(shù)組了。訪問布局體變量中的member的方法有:假設(shè)是由布局體變量名來訪問,那么是structure-variable-name.member;假設(shè)是由布局體變量指針來訪問,那么是structure-variable-pointer-member;
好了,上面的不是重點,也不難掌管,只是細節(jié)問題。布局體具有重要的應(yīng)用,如下的:
如自引用的布局體,常用來作為二叉樹等重要數(shù)據(jù)布局的實現(xiàn):假設(shè)我們要實現(xiàn)一個普遍的問題的解決算法——統(tǒng)計某些輸入的各單詞展現(xiàn)的頻數(shù)。由于輸入的單詞數(shù)是未知,內(nèi)容未知,長度未知,我們不能對輸入舉行排序并采用二分查找?!敲?,一種解決手段是:將已知的單詞排序——通過將每個到達的單詞排序到適當(dāng)位置。當(dāng)然,實現(xiàn)此功能不能通過線性排序,由于那樣有可能很長,相應(yīng)地,我們將使用二叉樹來實現(xiàn)。該二叉樹每一個單詞為一個二叉樹結(jié)點,每個結(jié)點包括:
apointertothetextofthewordacountofthenumberofoccurencesapointertotheleftchildnodeapointertotherightchildnode
其寫在程序中,即:
structtnode/*thetreenode:*/char*word;/*pointstothenext*/intcount;/*numberofoccurences*/structtnode*left;/*leftchild*/structtnode*right;/*rightchild*/
完成上述功能的完整程序如下:
#include#include#include#includetNode.h
#defineMAXWORD100structtnode*addtreestructtnode*,char*;voidtreeprintstructtnode*;intgetwordchar*,int;
structtnode*tallocvoid;char*strdup2char*;
/*wordfrequencycount*/main
structtnode*root;
charword[MAXWORD];
root=NULL;
whilegetwordword,MAXWORD!=EOF
ifisalphaword[0]
root=addtreeroot,word;
treeprintroot;
return0;
#defineBUFSIZE100charbuf[BUFSIZE];/*bufferforungetch*/
intbufp=0;/*nextfreepositioninbuf*/
intgetchvoid/*getapossiblypushedbackcharacter*/
returnbufp0?buf[--bufp]:get;
voidungetchintc/*pushbackcharacteroninput*/
ifbufp=BUFSIZE
printfungetch:toomanycharactersn;
else
buf[bufp++]=c;
/*getword:getnextwordorcharacterfrominput*/intgetwordchar*word,intlim
intc,getchvoid;
voidungetchint;
char*w=word;
whileisspacec=getch;
ifc!=EOF
*w++=c;
if!isalphac
*w=;
returnc;
for;--lim0;w++
if!isalnum*w=getch
ungetch*w;
break;
*w=;
returnword[0];
/*addtree:addanodewithw,atorbelowp*/structtnode*addtreestructtnode*p,char*w
intcond;
ifp==NULL/*anewwordhasarrived*/
p=talloc;/*makeanewnode*/
p-word=strdupw;
p-count=1;
p-left=p-right=NULL;
elseifcond=strcmpw,p-word==0
p-count++;/*repeatedword*/
elseifcond0less=than=into=left=p-=left=addtreep-left,w;
else/*greaterthanintorightsubtree*/
p-right=addtreep-right,w;
returnp;/*treeprint:in-orderprintoftreep*/voidtreeprintstructtnode*p
ifp!=NULL
treeprintp-left;
printf%4d%sn,p-count,p-word;
treeprintp-right;
#include/*talloc:makeatnode*/structtnode*tallocvoid
returnstructtnode*mallocsizeofstructtnode;
char*strdup2char*s/*makeaduplicateofs*/
char*p;
p=char*mallocstrlens+1;/*+1for*/
ifp!=NULL
strcpyp,s;
returnp;
其中,其它的關(guān)于union、enum這里就不多說了,再說一個關(guān)于布局體的分外重要的應(yīng)用——位操作:
當(dāng)然,我們知道,對于位操作,我們可通過#definetables(即用宏和C中的位操作來實現(xiàn))
如:
#defineKEYWORD01/*0001*/#defineEXTERNAL02/*0010*/#defineSTATIC04/*0100*/
或
enumKEYWORD=01,EXTERNAL=02,STATIC=04;
那么,flags|=EXTERNAL|STATIC;將開啟flags的EXTERNAL和STATIC位,而
flags=~EXTERNAL|STATIC;將關(guān)閉flags的EXTERNAL和STATIC位.
然而,上述定義的位模式可以用布局體如下寫:
structunsignedintis_keyword:1;unsignedintis_extern:1;unsignedintis_static:1;f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行與管委會合作協(xié)議
- 民宿營銷活動方案
- 機場航線資源共享協(xié)議
- 交易合同保密協(xié)議
- 草皮采購施工合同
- 店鋪商鋪房屋租賃合同
- 產(chǎn)品推廣策略與技術(shù)方案介紹手冊
- 工程合同付款方式范本5篇
- 租金鏈上支付智能合約協(xié)議
- Unit 9 Can you come to my party Section A 2a - 2d 教學(xué)設(shè)計 2024-2025學(xué)年人教版英語八年級上冊
- 浙江省重點中學(xué)2025屆數(shù)學(xué)高一上期末聯(lián)考試題含解析
- 廣州版四年級下冊《綜合實踐活動》教案共享-
- 基本樂理及音樂常識類知識考試題庫300題(含答案)
- 兩進虎跳峽(2022年云南昆明中考語文試卷散文閱讀題及答案)
- 高中英語教學(xué):選擇性必修第三冊Unit 1 Art過關(guān)測試
- 2024年山東春季高考語文試題答案詳細解析
- 技能人才評價新職業(yè)考評員培訓(xùn)在線考試(四川省)
- 《有機化學(xué)》課程說課
- 軌道電路參數(shù)與狀態(tài)課件講解
- 2024年中華人民共和國企業(yè)所得稅年度納稅申報表(帶公式)20240301更新
- 2024年安徽省高考化學(xué)試卷(真題+答案)
評論
0/150
提交評論