![初步剖析C語言編程中的結(jié)構(gòu)體_第1頁](http://file4.renrendoc.com/view/f37ec3c5c8317b0a9f3c550d1c83d5d2/f37ec3c5c8317b0a9f3c550d1c83d5d21.gif)
![初步剖析C語言編程中的結(jié)構(gòu)體_第2頁](http://file4.renrendoc.com/view/f37ec3c5c8317b0a9f3c550d1c83d5d2/f37ec3c5c8317b0a9f3c550d1c83d5d22.gif)
![初步剖析C語言編程中的結(jié)構(gòu)體_第3頁](http://file4.renrendoc.com/view/f37ec3c5c8317b0a9f3c550d1c83d5d2/f37ec3c5c8317b0a9f3c550d1c83d5d23.gif)
![初步剖析C語言編程中的結(jié)構(gòu)體_第4頁](http://file4.renrendoc.com/view/f37ec3c5c8317b0a9f3c550d1c83d5d2/f37ec3c5c8317b0a9f3c550d1c83d5d24.gif)
![初步剖析C語言編程中的結(jié)構(gòu)體_第5頁](http://file4.renrendoc.com/view/f37ec3c5c8317b0a9f3c550d1c83d5d2/f37ec3c5c8317b0a9f3c550d1c83d5d25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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;
好了,上面的不是重點,也不難掌管,只是細(xì)節(jié)問題。布局體具有重要的應(yīng)用,如下的:
如自引用的布局體,常用來作為二叉樹等重要數(shù)據(jù)布局的實現(xiàn):假設(shè)我們要實現(xiàn)一個普遍的問題的解決算法——統(tǒng)計某些輸入的各單詞展現(xiàn)的頻數(shù)。由于輸入的單詞數(shù)是未知,內(nèi)容未知,長度未知,我們不能對輸入舉行排序并采用二分查找?!敲?,一種解決手段是:將已知的單詞排序——通過將每個到達(dá)的單詞排序到適當(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年春八年級歷史下冊 第11課 城鄉(xiāng)人民生存狀態(tài)的滄桑巨變說課稿1(pdf) 川教版
- Unit 2 Understanding each other Project 說課稿-2023-2024學(xué)年高中英語牛津譯林版(2020)選擇性必修第四冊
- Unit 6 Meet my family Part B Let's talk Let's learn大單元整體說課稿表格式-2024-2025學(xué)年人教PEP版英語四年級上冊
- 2024年秋七年級生物上冊 3.5.2 綠色植物的呼吸作用說課稿 (新版)新人教版001
- 葡萄園立柱施工方案
- 2023三年級數(shù)學(xué)下冊 三 美麗的街景-兩位數(shù)乘兩位數(shù)信息窗1 美麗的街燈第2課時說課稿 青島版六三制
- 預(yù)制水泥臨時圍墻施工方案
- 臨時合同范例復(fù)制
- 西安電動推拉雨棚施工方案
- 2024秋一年級語文上冊 漢語拼音 11 ie üe er說課稿 新人教版
- 2024美團簡化版商家合作合同標(biāo)準(zhǔn)文本一
- 2025年貴州黔源電力股份有限公司招聘筆試參考題庫含答案解析
- 《休閑食品加工技術(shù)》 課件 1 休閑食品生產(chǎn)與職業(yè)生活
- 春季開學(xué)安全第一課
- 2025年新生兒黃疸診斷與治療研究進(jìn)展
- 廣東大灣區(qū)2024-2025學(xué)年度高一上學(xué)期期末統(tǒng)一測試英語試題(無答案)
- 2025年四川中煙工業(yè)限責(zé)任公司招聘110人高頻重點提升(共500題)附帶答案詳解
- 課題申報書:數(shù)智賦能高職院校思想政治理論課“金課”實踐路徑研究
- 公司安全生產(chǎn)事故隱患內(nèi)部報告獎勵工作制度
- H3CNE認(rèn)證考試題庫官網(wǎng)2022版
- 感統(tǒng)訓(xùn)練培訓(xùn)手冊(適合3-13歲兒童)
評論
0/150
提交評論