




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
假定一臺(tái)電腦由顯示器、CPU、內(nèi)存、硬盤和機(jī)箱5個(gè)部件組成,每個(gè)部件包括牌子、型號(hào)和價(jià)格3個(gè)屬性,從一個(gè)文本文件中讀取一臺(tái)電腦的5個(gè)部件的信息,然后算出該電腦的總價(jià)格,并把5個(gè)部件的屬性和總價(jià)格輸出另一個(gè)文件中。1C程序設(shè)計(jì)2-第五講-鏈表structBuJian{ charPinPai; charXingHao; intJiaGe;};2C程序設(shè)計(jì)2-第五講-鏈表main(){ structBuJianxsq,yp,cpu,nc,jx; intZongJiaGe; FILE*fp; fp=fopen("e:\\a.txt","r"); fscanf(fp,"%s%s%d",xsq.PinPai,xsq.XingHao,&xsq.JiaGe); fscanf(fp,"%s%s%d",yp.PinPai,yp.XingHao,&yp.JiaGe); fscanf(fp,"%s%s%d",cpu.PinPai,cpu.XingHao,&cpu.JiaGe); fscanf(fp,"%s%s%d",nc.PinPai,nc.XingHao,&nc.JiaGe); fscanf(fp,"%s%s%d",jx.PinPai,jx.XingHao,&jx.JiaGe); fclose(fp);3C程序設(shè)計(jì)2-第五講-鏈表 ZongJiaGe=xsq.JiaGe+yp.JiaGe+cpu.JiaGe+nc.JiaGe+jx.JiaGe; fp=fopen("e:\\b.txt","w"); fprint(fp,"%s%s%d\n",xsq.PinPai,xsq.XingHao,xsq.JiaGe); fprint(fp,"%s%s%d\n",yp.PinPai,yp.XingHao,yp.JiaGe); fprint(fp,"%s%s%d\n",cpu.PinPai,cpu.XingHao,cpu.JiaGe); fprint(fp,"%s%s%d\n",nc.PinPai,nc.XingHao,nc.JiaGe); fprint(fp,"%s%s%d\n",jx.PinPai,jx.XingHao,jx.JiaGe); fprint(fp,"%d\n",ZongJiaGe); fclose(fp);}4C程序設(shè)計(jì)2-第五講-鏈表第二題5C程序設(shè)計(jì)2-第五講-鏈表structBuJian{ charPinPai; charXingHao; intJiaGe;};6C程序設(shè)計(jì)2-第五講-鏈表structDianNao{ BuJianxsq; BuJianyp; BuJiancpu; BuJiannc; BuJianjx;};7C程序設(shè)計(jì)2-第五講-鏈表main(){ structDianNaodn[3]; inti; FILE*fp; fp=fopen("e:\\a.txt","r"); for(i=0;i<3;i++) { fscanf(fp,"%s%s%d",dn[i].xsq.PinPai,dn[i].xsq.XingHao,&dn[i].xsq.JiaGe); fscanf(fp,"%s%s%d",dn[i].yp.PinPai,dn[i].yp.XingHao,&dn[i].yp.JiaGe); fscanf(fp,"%s%s%d",dn[i].cpu.PinPai,dn[i].cpu.XingHao,&dn[i].cpu.JiaGe); fscanf(fp,"%s%s%d",dn[i].nc.PinPai,dn[i].nc.XingHao,&dn[i].nc.JiaGe); fscanf(fp,"%s%s%d",dn[i].jx.PinPai,dn[i].jx.XingHao,&dn[i].jx.JiaGe); } fclose(fp);8C程序設(shè)計(jì)2-第五講-鏈表第五講鏈表9C程序設(shè)計(jì)2-第五講-鏈表7QianSunLiZhouWuWangnullHead7131432537鏈表結(jié)構(gòu)(1)頭指針變量head──指向鏈表的首結(jié)點(diǎn)。(2)每個(gè)結(jié)點(diǎn)由2個(gè)域組成:1)數(shù)據(jù)域──存儲(chǔ)結(jié)點(diǎn)本身的信息。2)指針域──指向后繼結(jié)點(diǎn)的指針。(3)尾結(jié)點(diǎn)的指針域置為“NULL(空)”,作為鏈表結(jié)束的標(biāo)志10C程序設(shè)計(jì)2-第五講-鏈表鏈表結(jié)構(gòu)的定義structstudent{charname[10];structstudent*next;};next為student類型指針變量,指向下一個(gè)結(jié)點(diǎn)的指針域。結(jié)點(diǎn)的變量或指針變量的定義:structstudentnode,*head;node可以存放一個(gè)學(xué)生結(jié)點(diǎn)指針head可以存放學(xué)生結(jié)點(diǎn)的地址。11C程序設(shè)計(jì)2-第五講-鏈表例:建立一個(gè)簡(jiǎn)單鏈表,它由3個(gè)學(xué)生數(shù)據(jù)的節(jié)點(diǎn)組成。輸出各節(jié)點(diǎn)中的數(shù)據(jù)。#defineNULL0structstudent{longnum;floatscore;structstudent*next;};main(){structstudenta,b,c,*head,*p;a.num=10101;a.score=89.5;b.num=10103;b.score=90;c.num=10107;c.score=85;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next;}while(p!=NULL);}12C程序設(shè)計(jì)2-第五講-鏈表1010189.5a1010390b1010785c&ahead&b&cNULL13C程序設(shè)計(jì)2-第五講-鏈表對(duì)鏈表的基本操作
鏈表的基本操作有:創(chuàng)建、查找、插入、刪除和修改等:(1)創(chuàng)建鏈表:從無(wú)到有地建立起一個(gè)鏈表。(2)查找:按給定的結(jié)點(diǎn)索引號(hào)或檢索條件,查找某個(gè)結(jié)點(diǎn)。如果找到指定的結(jié)點(diǎn),則稱為檢索成功;否則,稱為檢索失敗。14C程序設(shè)計(jì)2-第五講-鏈表(3)插入:在結(jié)點(diǎn)ki-1與ki之間插入一個(gè)新的結(jié)點(diǎn)k’,使表的長(zhǎng)度增1,且邏輯關(guān)系發(fā)生如下變化:(4)刪除操作:刪除結(jié)點(diǎn)ki,使鏈表的長(zhǎng)度減1,且ki-1、ki和ki+1結(jié)點(diǎn)之間的邏輯關(guān)系發(fā)生如下變化:15C程序設(shè)計(jì)2-第五講-鏈表建立鏈表1.尾插法建立單鏈表特點(diǎn):頭指針固定不變,新產(chǎn)生的結(jié)點(diǎn)總是鏈接到鏈表的尾部。操作步驟:(1)設(shè)head為鏈表頭,last為鏈表尾結(jié)點(diǎn),p為新結(jié)點(diǎn)。head==NULL;(2)生成新結(jié)點(diǎn),由p指針指示(第一次p和last指向同一個(gè)結(jié)點(diǎn)),并將新結(jié)點(diǎn)的地址域清空:
p->next=NULL;(3)如果head為NULL,則
head=p;
否則last->next=p; (4)last=p;(5)重復(fù)(2)~(4),繼續(xù)建立新結(jié)點(diǎn)。16C程序設(shè)計(jì)2-第五講-鏈表structstudent{intnum;charname[10];structstudent*next;};17C程序設(shè)計(jì)2-第五講-鏈表head=NULLlast=p=(structstudent*)malloc(sizeof(structstudent))p->next=NULL;scanf(“%d”,&p->num);head==NULL?head=plast->next=p;last=p;p=(structstudent*)malloc(sizeof(structstudent))p->next=NULL;scanf(“%d”,&p->num);p->num==0?YNYNscanf(“%d”,p->name);18C程序設(shè)計(jì)2-第五講-鏈表structstudent*creat(void){structstudent*head=NULL;structstudent*p,*last;p=(structstudent*)malloc(sizeof(structstudent));last=p;p->next=NULL;scanf(“%d”,&p->num);
19C程序設(shè)計(jì)2-第五講-鏈表while(p->num!=0){scanf(“%s”,p->name);
if(head==NULL)head=p;else{last->next=p;last=p;}p=(structstudent*)malloc(sizeof(structstudent));p->next=NULL;scanf(“%d”,&p->num);}returnhead;}20C程序設(shè)計(jì)2-第五講-鏈表2.頭插法建立單鏈表特點(diǎn):新產(chǎn)生的結(jié)點(diǎn)作為新的鏈表頭插入鏈表。操作步驟:(1)head=NULL;(2)生成新結(jié)點(diǎn),指針變量p指向該結(jié)點(diǎn);(3)p->next=head;head=p;(4)重復(fù)(2)~(3),繼續(xù)生成下一個(gè)鏈表結(jié)點(diǎn)。21C程序設(shè)計(jì)2-第五講-鏈表鏈表的學(xué)習(xí)與運(yùn)用是對(duì)前面內(nèi)容的綜合輸入盡量用fscanf
少用scanf22C程序設(shè)計(jì)2-第五講-鏈表作業(yè)建立學(xué)生結(jié)構(gòu)體,包括學(xué)號(hào)、姓名和年齡,從文件“E:\s.txt”中讀取5個(gè)學(xué)生的信息,用頭插法建立一個(gè)學(xué)生的鏈表。23C程序設(shè)計(jì)2-第五講-鏈表鏈表的訪問(wèn)1.輸出鏈表結(jié)點(diǎn)操作步驟:(1)得到鏈表頭結(jié)點(diǎn)的地址
head;(2)指針變量p=head;(3)輸出p所指結(jié)點(diǎn)的成員值;(4)p后移一個(gè)結(jié)點(diǎn),p=p->next;(5)重復(fù)(3)(4),直到鏈表為空。24C程序設(shè)計(jì)2-第五講-鏈表voidoutput(structstudent*head){structstudent*p=head;//p:遍歷鏈表中的每個(gè)節(jié)點(diǎn)
while(p!=NULL){輸出節(jié)點(diǎn)信息;
p=p->next;}//指針后移}程序25C程序設(shè)計(jì)2-第五講-鏈表2.統(tǒng)計(jì)鏈表結(jié)點(diǎn)的個(gè)數(shù)
一般情況下,各個(gè)單鏈表中結(jié)點(diǎn)個(gè)數(shù)是隨機(jī)的,要想知道表中結(jié)點(diǎn)數(shù)目,必須從表頭開始訪問(wèn)到表尾,逐個(gè)統(tǒng)計(jì)出結(jié)點(diǎn)數(shù)目。
3.查找鏈表的某個(gè)結(jié)點(diǎn)在鏈表上查找符合某個(gè)條件的結(jié)點(diǎn),也必須從鏈表頭開始訪問(wèn)鏈表。
26C程序設(shè)計(jì)2-第五講-鏈表鏈表的插入操作在第n個(gè)結(jié)點(diǎn)之后插入1個(gè)新結(jié)點(diǎn),插入操作步驟:(1)q指針指向新結(jié)點(diǎn),i為已訪問(wèn)過(guò)的結(jié)點(diǎn)數(shù);(2)p=head,r指向p結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn);(3)i++,r=p,p=p->next,p結(jié)點(diǎn)往前移動(dòng)一個(gè)結(jié)點(diǎn);(4)若i<n且p!=NULL,則重復(fù)(3)(5)若i==0,則鏈表為空,沒(méi)有結(jié)點(diǎn),q結(jié)點(diǎn)作為鏈表的第1個(gè)結(jié)點(diǎn)插入:q->next=head,head=q;(6)若i<n且p==NULL,則鏈表不足n個(gè),將q結(jié)點(diǎn)插入到鏈表尾r結(jié)點(diǎn)之后:r->next=q,q->next=NULL;(7)否則,將q結(jié)點(diǎn)插入到第n個(gè)結(jié)點(diǎn)之后,即插入到r結(jié)點(diǎn)與p結(jié)點(diǎn)之間:r->next=q,q->next=p;(8)返回鏈表頭head。27C程序設(shè)計(jì)2-第五講-鏈表Headp101Zhang90103Wang80NULL105Li70(a)head指示已有鏈表,q指示待插入結(jié)點(diǎn)q104Zhao7028C程序設(shè)計(jì)2-第五講-鏈表Headr101Zhang90q104Zhao60103Wang80pNULL105Li70注意:指針的賦值順序q->next=r->next;r->next=q;29C程序設(shè)計(jì)2-第五講-鏈表structstudent*insert(structstudent*head,structstudent*p){structstudent*p1,*p2;if(head==NULL)head=p;else{p2=p1=head;while(p1!=NULL&&p->num>p1->num){p2=p1;p1=p1->next;}//查找插入點(diǎn)
if(p1==head){p->next=head;head=p;}else{p->next=p2->next;p2->next=p;}//插入
}returnhead;}30C程序設(shè)計(jì)2-第五講-鏈表鏈表的刪除操作刪除第n個(gè)結(jié)點(diǎn)(1)p=head,q指針指向p所指結(jié)點(diǎn)的前1個(gè)結(jié)點(diǎn);(2)i為訪問(wèn)過(guò)的結(jié)點(diǎn)數(shù)目;(3)i++,q=p,p=p->next,p、q移動(dòng)1個(gè)結(jié)點(diǎn);(4)若p!=NULL且i<n-1,重復(fù)(3)(5)若n==1,則刪除第1個(gè)結(jié)點(diǎn),將下一個(gè)結(jié)點(diǎn)作為鏈表頭結(jié)點(diǎn):head=head->next;(6)若head==NULL,鏈表為空,不能刪除;(7)若p==NULL,第n個(gè)結(jié)點(diǎn)不存在,不能刪除;(8)找到第n個(gè)結(jié)點(diǎn),刪除p結(jié)點(diǎn):
q->next=p->next;p的前1個(gè)結(jié)點(diǎn)的next值賦值為p的next域;(9)返回head。31C程序設(shè)計(jì)2-第五講-鏈表圖刪除第n個(gè)結(jié)點(diǎn)(a)head指示已有鏈表Headp101Zhang90103Wang80NULL105Li60102Zhao70(b)刪除第3個(gè)結(jié)點(diǎn)qpHead101Zhang90103Wang80NULL105Li60102Zhao70指針的賦值方法:q->next=p->next;free(p);32C程序設(shè)計(jì)2-第五講-鏈表程序structstudent*delete(structstudent*head,intnum){structstudent*p,*p1;//p:刪除點(diǎn),p1:刪除點(diǎn)前一個(gè)節(jié)點(diǎn)if(head==NULL)輸出提示信息;//鏈表為空時(shí)沒(méi)有要?jiǎng)h除的節(jié)點(diǎn),這里也可以不判斷,可直接使用綠色和藍(lán)色的代碼else{p1=p=head;while(p!=NULL&&p->num!=num){p1=p;p=p->next;}//查找刪除點(diǎn)
if(p==NULL)輸出提示信息//沒(méi)有找到要?jiǎng)h除的節(jié)點(diǎn)
elseif(p==head){head=p->next;free(p);}/*注意:務(wù)必判斷頭結(jié)點(diǎn)是否是需要?jiǎng)h除的節(jié)點(diǎn)*/else{p1->next=p->next;free(p);}}//刪除returnhead;
}33C程序設(shè)計(jì)2-第五講-鏈表練習(xí)
建立一個(gè)學(xué)生結(jié)構(gòu)體如下,寫一個(gè)函數(shù)創(chuàng)建一個(gè)包含3個(gè)學(xué)生的鏈表,再寫兩個(gè)函數(shù)分別根據(jù)學(xué)生姓名來(lái)查找一個(gè)學(xué)生和刪除一個(gè)學(xué)生.structstudent{charname[16];/*學(xué)生姓名*/intsno,age;/*學(xué)號(hào),年齡*/structstudent*next;};34C程序設(shè)計(jì)2-第五講-鏈表第六講文件讀寫
FILE*fp;fp=fopen(“e:\\a.txt”,”w+”);fprintf(fp,”%d”,56); fclose(fp);35C程序設(shè)計(jì)2-第五講-鏈表文件讀寫
FILE*fp; intx,y,z;fp=fopen(“e:\\a.bmp”,”r”);x=fgetc(fp);y=fgetc(fp);z=fgetc(fp);fclose(fp);36C程序設(shè)計(jì)2-第五講-鏈表位運(yùn)算——按位與(&)運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作舉例:計(jì)算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其它位不變。例如:
將char型變量a的最低位置0:a=a&0376;(0xfe)取指定位。
例如:有charc;inta;
取出a的低字節(jié),置于c中:c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)藝師考試公共基礎(chǔ)知識(shí)試題及答案
- 微生物技術(shù)在農(nóng)業(yè)中的應(yīng)用試題及答案
- 煤氣化技術(shù)的能源消費(fèi)模式轉(zhuǎn)型策略考核試卷
- 2025年危險(xiǎn)化學(xué)品安全-氯化工藝作業(yè)模擬考試題及答案
- 2023年中國(guó)鐵路信息科技集團(tuán)有限公司招聘應(yīng)屆高校畢業(yè)生【33人】筆試參考題庫(kù)附帶答案詳解
- 微生物檢驗(yàn)中的數(shù)據(jù)管理方法試題及答案
- 資產(chǎn)配置策略相關(guān)考題及答案
- 項(xiàng)目進(jìn)度推進(jìn)中的優(yōu)先級(jí)管理試題及答案
- 2023年中國(guó)聯(lián)通內(nèi)蒙古分公司夏季校園招聘筆試參考題庫(kù)附帶答案詳解
- 空調(diào)器質(zhì)量檢測(cè)方法與設(shè)備考核試卷
- 球機(jī)施工方案
- 2025年安全員之B證(項(xiàng)目負(fù)責(zé)人)通關(guān)題庫(kù)(附答案)
- 危險(xiǎn)品駕駛員聘用合同二零二五年
- 貴州國(guó)企招聘2025遵義市公共交通(集團(tuán))有限責(zé)任公司招聘70人筆試參考題庫(kù)附帶答案詳解
- 企業(yè)文化調(diào)研方案
- GB/T 45440-2025電子商務(wù)家政家政服務(wù)人員能力信息描述
- 家庭教育:身教重于言傳
- 石化行業(yè)智能化升級(jí)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 磚砌圍墻工程施工方案
- 兒童衛(wèi)生習(xí)慣的養(yǎng)成與學(xué)校教育的結(jié)合
- 手術(shù)室煙霧試題及答案
評(píng)論
0/150
提交評(píng)論