![結(jié)構(gòu)體共用休和用戶定義類型_第1頁(yè)](http://file4.renrendoc.com/view/8ff7c2ee7916e41e096b5f8ea86030c6/8ff7c2ee7916e41e096b5f8ea86030c61.gif)
![結(jié)構(gòu)體共用休和用戶定義類型_第2頁(yè)](http://file4.renrendoc.com/view/8ff7c2ee7916e41e096b5f8ea86030c6/8ff7c2ee7916e41e096b5f8ea86030c62.gif)
![結(jié)構(gòu)體共用休和用戶定義類型_第3頁(yè)](http://file4.renrendoc.com/view/8ff7c2ee7916e41e096b5f8ea86030c6/8ff7c2ee7916e41e096b5f8ea86030c63.gif)
![結(jié)構(gòu)體共用休和用戶定義類型_第4頁(yè)](http://file4.renrendoc.com/view/8ff7c2ee7916e41e096b5f8ea86030c6/8ff7c2ee7916e41e096b5f8ea86030c64.gif)
![結(jié)構(gòu)體共用休和用戶定義類型_第5頁(yè)](http://file4.renrendoc.com/view/8ff7c2ee7916e41e096b5f8ea86030c6/8ff7c2ee7916e41e096b5f8ea86030c65.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
結(jié)構(gòu)體共用休和用戶定義類型演示文稿目前一頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/221作者:張旭仟版權(quán)所有歡迎盜版(優(yōu)選)結(jié)構(gòu)體共用休和用戶定義類型目前二頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/222作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義應(yīng)先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};struct
studentstu1,stu2;又如:#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};STUDENTstu1,stu2;stu1100102WangLiF2098Beijing100101LiXinM1990.5Shanghaistu2目前三頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/223作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義也可以直接定義結(jié)構(gòu)體變量。一般形式:struct{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
……}變量名表列;如:struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;本例中,結(jié)構(gòu)體類型沒(méi)有被命名,這稱為無(wú)名結(jié)構(gòu)體。無(wú)名結(jié)構(gòu)體可以用來(lái)直接定義變量,但本類型只能使用一次,后面無(wú)法再用。目前四頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/224作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)指針變量的定義結(jié)構(gòu)指針變量說(shuō)明的一般形式為:struct結(jié)構(gòu)名*結(jié)構(gòu)指針變量名例如,在前面的例題中定義了stu這個(gè)結(jié)構(gòu),如要說(shuō)明一個(gè)指向stu的指針變量pstu,可寫(xiě)為:structstu*pstu;當(dāng)然也可在定義stu結(jié)構(gòu)時(shí)同時(shí)說(shuō)明pstu。結(jié)構(gòu)指針變量也必須要先賦值后才能使用。賦值是把結(jié)構(gòu)變量的首地址賦予該指針變量。要特別注意的是,不能把結(jié)構(gòu)類型名賦予一個(gè)指針變量。如果boy是被說(shuō)明為stu類型的結(jié)構(gòu)變量,則:pstu=&boy是正確的;pstu=&stu是錯(cuò)誤的。目前五頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/225作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義說(shuō)明結(jié)構(gòu)體的成員名可以與程序中的變量名相同,二者不代表同一對(duì)象。需要特別說(shuō)明的是,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量不是一個(gè)概念結(jié)構(gòu)體類型是用戶自定義的結(jié)構(gòu)型數(shù)據(jù)類型,它在定義時(shí)并不需要分配內(nèi)存。你不能給一種結(jié)構(gòu)體類型賦值,當(dāng)然也不能對(duì)它存取和運(yùn)算。結(jié)構(gòu)體變量就是具有特定結(jié)構(gòu)體類型的變量,編譯時(shí)系統(tǒng)將為其分配相應(yīng)的存儲(chǔ)空間??梢詫?duì)其賦值、存取以及運(yùn)算。目前六頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/226作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義例:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};注意:這是結(jié)構(gòu)體定義,只描述結(jié)構(gòu)的組織形式,student是結(jié)構(gòu)體類型名,編譯時(shí)并不為它分配內(nèi)存namenumsexagescoreaddr4字節(jié)4字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……結(jié)構(gòu)體只有在實(shí)例化時(shí)才為每個(gè)結(jié)構(gòu)體成員分配內(nèi)存。目前七頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/227作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義結(jié)構(gòu)體中的成員(即“域”),可以是普通變量也可以是一個(gè)結(jié)構(gòu)體變量。也就是說(shuō)結(jié)構(gòu)體可以嵌套使用。如:structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear或:structstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;目前八頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/228作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例:structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};目前九頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/229作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的初始化形式二:struct結(jié)構(gòu)體名{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};目前十頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2210作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的初始化形式三:struct{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例:struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};目前十一頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2211作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用在定義了結(jié)構(gòu)體變量以后,當(dāng)然可以引用這個(gè)變量。引用規(guī)則:結(jié)構(gòu)體中的成員只能單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。引用方式有三種:結(jié)構(gòu)體變量名.成員指針變量名->成員(*指針變量名).成員其中成員(分量)運(yùn)算符“.”,結(jié)構(gòu)指向運(yùn)算符“->”,與前面已經(jīng)接觸過(guò)的下標(biāo)運(yùn)算符[]、圓括號(hào)運(yùn)算符()的優(yōu)先級(jí)均為1,結(jié)合性從左向右目前十二頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2212作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用使用成員(分量)運(yùn)算符“.”引用結(jié)構(gòu)體成員如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.score=85.5;stu1.num=10;stu1.score+=stu2.score;stu1.age++;目前十三頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2213作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用使用結(jié)構(gòu)指針變量,往往能更方便地訪問(wèn)結(jié)構(gòu)變量的各個(gè)成員,其訪問(wèn)的一般形式為:(*結(jié)構(gòu)指針變量).成員名或?yàn)椋航Y(jié)構(gòu)指針變量->成員名例如:(*pstu).num或者:pstu->num應(yīng)該注意,(*pstu)兩側(cè)的括號(hào)不可少,因?yàn)槌蓡T符“.”的優(yōu)先級(jí)高于“*”。如去掉括號(hào)寫(xiě)作*pstu.num則等效于*(pstu.num),這樣,意義就完全不對(duì)了。目前十四頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2214作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用示例:結(jié)構(gòu)指針變量的具體說(shuō)明和使用方法structstu{intnum;char*name;charsex;floatscore;}boy1={102,"Zhangping",'M',78.5},*pstu;main(){pstu=&boy1;printf("Number=%d\nName=%s\n",boy1.num,);printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);printf("Number=%d\nName=%s\n",pstu->num,pstu->name);printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);}目前十五頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2215作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用例中,printf語(yǔ)句試圖整體引用結(jié)構(gòu)體變量stu1的用法是不可行的。舉例:structstudent{ intnum; charname[20]; charsex; intage; floatscore; charaddr[30];}stu1,stu2;
printf(“%d,%s,%c,%d,%f,%s\n”,stu1);說(shuō)明:(1)不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。目前十六頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2216作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用說(shuō)明:(2)但是,將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量是允許的如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;……
stu1=stu2;目前十七頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2217作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用說(shuō)明:(3)對(duì)于嵌套的結(jié)構(gòu)體,內(nèi)部成員可以逐級(jí)引用例:structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;……
stu1.birthday.month=12;目前十八頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2218作者:張旭仟版權(quán)所有歡迎盜版結(jié)構(gòu)體變量的引用說(shuō)明:(4)不能對(duì)結(jié)構(gòu)體變量做關(guān)系運(yùn)算例:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;……
if(stu1==stu2)……例中,語(yǔ)句if(stu1==stu2)是錯(cuò)誤的目前十九頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2219作者:張旭仟版權(quán)所有歡迎盜版函數(shù)之間結(jié)構(gòu)體變量的數(shù)據(jù)傳遞函數(shù)之間結(jié)構(gòu)體變量的數(shù)據(jù)傳遞分以下幾種情況(1)向函數(shù)傳遞結(jié)構(gòu)體變量的成員(2)向函數(shù)傳遞結(jié)構(gòu)體變量(3)向函數(shù)傳遞結(jié)構(gòu)體的指針例如:通過(guò)函數(shù)給結(jié)構(gòu)體成員賦值#include"stdio.h"structAB{chara[10];intb;};getdata(structAB*p){scanf("%s%d",&p->a,&p->b);}main(){structABs;getdata(&s);printf("%s,%d\n",s.a,s.b);}目前二十頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2220作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)存儲(chǔ)分配動(dòng)態(tài)存儲(chǔ)分配的概念變量、數(shù)組一旦定義,其存儲(chǔ)長(zhǎng)度在整個(gè)程序中是固定不變的,因此被稱為“靜態(tài)存儲(chǔ)分配”。然而,實(shí)際編程中,有時(shí)候所需的內(nèi)存空間取決于實(shí)際輸入的數(shù)據(jù),無(wú)法預(yù)先確定。為了解決上述問(wèn)題,C語(yǔ)言提供了一些內(nèi)存管理函數(shù),可以按需要?jiǎng)討B(tài)地分配內(nèi)存空間,也可把不再使用的空間回收(釋放),這種機(jī)制稱為“動(dòng)態(tài)存儲(chǔ)分配”。常用的動(dòng)態(tài)存儲(chǔ)分配函數(shù)有以下三個(gè):分配內(nèi)存空間函數(shù)malloc分配內(nèi)存空間函數(shù)calloc釋放內(nèi)存空間函數(shù)free使用以上函數(shù)必須有文件包含命令:#include"stdlib.h"目前二十一頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2221作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)存儲(chǔ)分配分配內(nèi)存空間函數(shù)malloc調(diào)用形式:
(類型說(shuō)明符*)malloc(size)功能:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一塊長(zhǎng)度為"size"字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。其中“類型說(shuō)明符”表示把該區(qū)域用于何種數(shù)據(jù)類型。(類型說(shuō)明符*)表示把返回值強(qiáng)制轉(zhuǎn)換為該類型指針。“size”是一個(gè)無(wú)符號(hào)數(shù)。例如:char*pc;pc=(char*)malloc(100);表示動(dòng)態(tài)分配100個(gè)字節(jié)的內(nèi)存空間,并強(qiáng)制轉(zhuǎn)換為字符數(shù)組類型,函數(shù)的返回值為指向該字符數(shù)組的指針,把該指針賦予指針變量pc。目前二十二頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2222作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)存儲(chǔ)分配分配內(nèi)存空間函數(shù)calloccalloc也用于分配內(nèi)存空間。調(diào)用形式:
(類型說(shuō)明符*)calloc(n,size)功能:在內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。(類型說(shuō)明符*)用于強(qiáng)制類型轉(zhuǎn)換。calloc函數(shù)與malloc函數(shù)的區(qū)別僅在于一次可以分配n塊區(qū)域。例如:structstu*ps=(struetstu*)calloc(2,sizeof(structstu));其中的sizeof(structstu)是求stu的結(jié)構(gòu)長(zhǎng)度。因此該語(yǔ)句的意思是:按stu的長(zhǎng)度分配2塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。目前二十三頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2223作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)存儲(chǔ)分配釋放內(nèi)存空間函數(shù)free調(diào)用形式:free(void*ptr);功能:釋放ptr所指向的一塊內(nèi)存空間,ptr是一個(gè)任意類型的指針變量,它指向被釋放區(qū)域的首地址。被釋放區(qū)應(yīng)是由malloc或calloc函數(shù)所分配的區(qū)域。例如:free(pc);free(ps);目前二十四頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2224作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)鏈表的概念如果采用動(dòng)態(tài)分配的辦法存儲(chǔ)學(xué)生記錄,一次為一條記錄分配一塊空間(我們稱之為結(jié)點(diǎn)),這樣就無(wú)須預(yù)先確定學(xué)生的準(zhǔn)確人數(shù)。如果某學(xué)生退學(xué),也可刪去該結(jié)點(diǎn),并釋放該結(jié)點(diǎn)占用的存儲(chǔ)空間。每個(gè)結(jié)點(diǎn)之間物理上可以是不連續(xù)的。結(jié)點(diǎn)之間的聯(lián)系用指針實(shí)現(xiàn),即在結(jié)點(diǎn)結(jié)構(gòu)中定義一個(gè)成員項(xiàng)存放下一結(jié)點(diǎn)的首地址,這個(gè)成員,稱為指針域。在第一個(gè)結(jié)點(diǎn)的指針域內(nèi)存入第二個(gè)結(jié)點(diǎn)的首地址,在第二個(gè)結(jié)點(diǎn)的指針域內(nèi)又存放第三個(gè)結(jié)點(diǎn)的首地址,如此串連下去直到最后一個(gè)結(jié)點(diǎn)。最后一個(gè)結(jié)點(diǎn)因無(wú)后續(xù)結(jié)點(diǎn)連接,其指針域置為空(NULL)。這樣一種連接方式,在數(shù)據(jù)結(jié)構(gòu)中稱為“鏈表”。目前二十五頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2225作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)鏈表的概念鏈表的組成:鏈表中的所有結(jié)點(diǎn)都是同一種結(jié)構(gòu)類型。包括一個(gè)頭指針,是一個(gè)結(jié)構(gòu)類型的指針變量,用來(lái)存放鏈表第一個(gè)結(jié)點(diǎn)的首地址;若干個(gè)結(jié)點(diǎn),用來(lái)存放用戶需要的實(shí)際數(shù)據(jù)以及鏈接節(jié)點(diǎn)的指針。下圖為一簡(jiǎn)單鏈表的示意圖頭結(jié)點(diǎn)head沒(méi)有數(shù)據(jù)域,只負(fù)責(zé)存放第一個(gè)結(jié)點(diǎn)的首地址。除head外,每個(gè)結(jié)點(diǎn)都分為兩個(gè)域,其中數(shù)據(jù)域存放各種實(shí)際的數(shù)據(jù),如學(xué)號(hào)、姓名等;指針域存放下一結(jié)點(diǎn)的首地址。目前二十六頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2226作者:張旭仟版權(quán)所有歡迎盜版動(dòng)態(tài)鏈表的概念鏈表的結(jié)點(diǎn)鏈表的結(jié)點(diǎn)都是結(jié)構(gòu)體類型,如structstudent{intnum;
floatscore;
structstudent*next;};其中成員num和score用來(lái)存放結(jié)點(diǎn)中用戶需要用到的數(shù)據(jù);next是指針類型的成員,它指向structstudent類型數(shù)據(jù)(也就是next所在的結(jié)構(gòu)體類型)目前二十七頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2227作者:張旭仟版權(quán)所有歡迎盜版鏈表操作的建立與操作實(shí)例定義鏈表的結(jié)點(diǎn)結(jié)構(gòu)typedefstructnode{ charname[20]; structnode*link;}stud;這樣就定義了一個(gè)單鏈表的結(jié)構(gòu),其中charname[20]是一個(gè)用來(lái)存儲(chǔ)姓名的字符型數(shù)組,指針*link是一個(gè)用來(lái)存儲(chǔ)其直接后繼的指針。定義好了鏈表的結(jié)構(gòu)之后,就可以在數(shù)據(jù)域中存儲(chǔ)適當(dāng)?shù)臄?shù)據(jù),如有后繼結(jié)點(diǎn),則把鏈域指向其直接后繼,若沒(méi)有,則置為NULL。目前二十八頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2228作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例創(chuàng)建鏈表stud*creat(intn)
{stud*p,*h,*s;inti;if((h=(stud*)malloc(sizeof(stud)))==NULL){printf("不能分配內(nèi)存空間!");returnNULL;}
h->name[0]='\0'; /*把表頭結(jié)點(diǎn)的數(shù)據(jù)域置空*/
h->link=NULL; /*把表頭結(jié)點(diǎn)的鏈域置空*/
p=h; /*p指向表頭結(jié)點(diǎn)*/
for(i=0;i<n;i++)
{if((s=(stud*)malloc(sizeof(stud)))==NULL){printf("不能分配內(nèi)存空間!");returnNULL;}
p->link=s;
printf("請(qǐng)輸入第%d個(gè)人的姓名",i+1);
scanf("%s",s->name);s->link=NULL;
p=s;
}
return(h);
}注意:由于用到malloc函數(shù),所以在程序的開(kāi)始部分應(yīng)有如下包含命令:#include<stdlib.h>目前二十九頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2229作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例創(chuàng)建遍歷鏈表的函數(shù)main(){stud*head;head=creat(3);list(head);}voidlist(stud*head){stud*p,*q;p=head;while(p->link!=NULL){q=p->link;printf("%s\n",q->name);p=q;}}調(diào)用創(chuàng)建和輸出鏈表的主函數(shù)目前三十頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2230作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例根據(jù)數(shù)據(jù)項(xiàng)的值檢索鏈表中的結(jié)點(diǎn)思路:對(duì)單鏈表的結(jié)點(diǎn)依次掃描,檢測(cè)其數(shù)據(jù)域是否是我們所要查好的值,若是返回該結(jié)點(diǎn)的指針,否則返回NULL。
stud*search(stud*head,char*x)
{stud*p;char*y;
p=head->link;
while(p!=NULL)
{y=p->name;
if(strcmp(y,x)==0)return(p);
elsep=p->link;
}
if(p==NULL)
printf("沒(méi)有查找到該數(shù)據(jù)!");
returnNULL;}目前三十一頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2231作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例測(cè)試結(jié)點(diǎn)檢索函數(shù)的主函數(shù)main()
{charfullname[20];
stud*head,*searchpoint;
head=creat(3);
printf("請(qǐng)輸入你要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname);printf("你要查找的人的姓名:%s\n",searchpoint->name);
}目前三十二頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2232作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例在單向鏈表中插入新結(jié)點(diǎn)在單向鏈表中插入新結(jié)點(diǎn)的步驟如下:(1)先創(chuàng)建一個(gè)新結(jié)點(diǎn),并用指針p指向該結(jié)點(diǎn)。(2)將q指向的結(jié)點(diǎn)的next域的值(即q的后繼結(jié)點(diǎn)的指針)賦值給p指向結(jié)點(diǎn)的next域。(3)將p的值賦值給q的next域。通過(guò)以上3步就可以實(shí)現(xiàn)在鏈表中由指針q指向的結(jié)點(diǎn)后面插入p所指向的結(jié)點(diǎn)。可以通過(guò)圖1-5形象地展示出這一過(guò)程。目前三十三頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2233作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例在單向鏈表中插入新結(jié)點(diǎn)voidinsert(stud*p)
{charstuname[20];stud*s;if((s=(stud*)malloc(sizeof(stud)))==NULL)
{printf("不能分配內(nèi)存空間!");exit(0);}
printf("輸入要插入學(xué)生結(jié)點(diǎn)的姓名:");
scanf("%s",stuname);
strcpy(s->name,stuname);
s->link=p->link;
p->link=s;}目前三十四頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2234作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例測(cè)試插入結(jié)點(diǎn)函數(shù)的主函數(shù)main(){charfullname[20];stud*head,*searchpoint;
head=creat(2);printf("輸入要在他之后添加結(jié)點(diǎn)的那個(gè)人的姓名:");scanf("%s",fullname);searchpoint=search(head,fullname);insert(searchpoint);list(head);}目前三十五頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2235作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例刪除單向鏈表中的結(jié)點(diǎn)在鏈表內(nèi)刪除節(jié)點(diǎn)又三種不同的情形:
1.刪除第一個(gè)節(jié)點(diǎn):只需要將head指向第二個(gè)節(jié)點(diǎn)
2.刪除最后一個(gè)節(jié)點(diǎn),只需要將指向最后一個(gè)節(jié)點(diǎn)的指針(引用)指向NULL
3.刪除中間節(jié)點(diǎn),只要將需要?jiǎng)h除節(jié)點(diǎn)的指針指向需要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。stud*del(stud*head,stud*x){stud*p;if(head==x)returnhead->link;else{p=head;while(p->link!=x)p=p->link;if(x->link==NULL)p->link=NULL;elsep->link=x->link;}returnhead; }目前三十六頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2236作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例測(cè)試刪除結(jié)點(diǎn)函數(shù)的主函數(shù)main()
{charfullname[20];
stud*head,*searchpoint;
head=creat(3);
printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
del(head,searchpoint);}目前三十七頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2237作者:張旭仟版權(quán)所有歡迎盜版鏈表的建立與操作實(shí)例銷毀一個(gè)鏈表鏈表使用完畢后建議銷毀它,因?yàn)殒湵肀旧頃?huì)占用內(nèi)存空間。如果一個(gè)系統(tǒng)中使用了很多鏈表,而使用完畢后又不及時(shí)銷毀它,那么這些垃圾空間積累過(guò)多,最終可能導(dǎo)致內(nèi)存泄漏甚至程序崩潰。voiddestroy(stud*head){stud*p,*q;p=head;while(p!=NULL){q=p->link;free(p);p=q;}head=NULL;}目前三十八頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2238作者:張旭仟版權(quán)所有歡迎盜版共用體的定義共用體也叫聯(lián)合體,也是一種構(gòu)造數(shù)據(jù)類型。共用體可以使幾個(gè)不同類型的變量共占同一段內(nèi)存。定義形式:union共用體名{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….};其中union是關(guān)鍵字,共用體名是用戶自定義標(biāo)示符。例:uniondata{inti;charch;floatf;};注意:這里的類型定義在編譯時(shí)也是不分配內(nèi)存的。目前三十九頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2239作者:張旭仟版權(quán)所有歡迎盜版共用體變量的定義形式一:uniondata{inti;charch;floatf;};uniondataa,b;形式二:uniondata{inti;charch;floatf;}a,b;fchifchiab共用體變量任何時(shí)刻只有一個(gè)成員存在。共用體變量在編譯時(shí)被分配內(nèi)存,長(zhǎng)度=最長(zhǎng)成員所占字節(jié)數(shù)。形式三:union{inti;charch;floatf;}a,b;目前四十頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2240作者:張旭仟版權(quán)所有歡迎盜版共用體變量的引用引用方式:共用體變量名.成員名共用體指針名->成員名(*共用體指針名).成員名例:如有以下定義uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.i、a.ch、a.fp->i、p->ch、p->f(*p).i、(*p).ch、(*p).fd[0].i、d[0].ch、d[0].f則可以如下方式加以引用:目前四十一頁(yè)\總數(shù)四十五頁(yè)\編于十七點(diǎn)2023/5/2241作者:張旭仟版
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《義務(wù)教育法》知識(shí)考試復(fù)習(xí)題庫(kù)(含答案)
- (技師)化學(xué)檢驗(yàn)工職業(yè)技能鑒定理論考試題庫(kù)(含答案)
- 2025年江西外語(yǔ)外貿(mào)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年新疆工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 麻雀的聽(tīng)評(píng)課記錄
- 故事資源:魔法森林探險(xiǎn)公開(kāi)課教案教學(xué)設(shè)計(jì)課件資料
- 鉻脅迫下AMF對(duì)鳶尾根際土壤微生物群落結(jié)構(gòu)及抗性基因的影響機(jī)制
- 服裝采購(gòu)合同(2篇)
- 2025年外研版五年級(jí)語(yǔ)文上冊(cè)月考試卷含答案
- 2025年浙教版選修4地理下冊(cè)月考試卷含答案
- 房地產(chǎn)調(diào)控政策解讀
- 產(chǎn)前診斷室護(hù)理工作總結(jié)
- 2024-2025學(xué)年八年級(jí)數(shù)學(xué)人教版上冊(cè)寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《AP內(nèi)容介紹》課件
- 醫(yī)生定期考核簡(jiǎn)易程序述職報(bào)告范文(10篇)
- 安全創(chuàng)新創(chuàng)效
- 《中國(guó)糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- 國(guó)外文化消費(fèi)研究述評(píng)
- 部編版語(yǔ)文四年級(jí)下冊(cè)第一單元 迷人的鄉(xiāng)村風(fēng)景 大單元整體教學(xué)設(shè)計(jì)
- 湖南省長(zhǎng)郡中學(xué)2023-2024學(xué)年高二下學(xué)期寒假檢測(cè)(開(kāi)學(xué)考試)物理 含解析
- 五年級(jí)行程問(wèn)題應(yīng)用題100道
評(píng)論
0/150
提交評(píng)論