版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
沈陽職業(yè)技術(shù)學(xué)院教案用紙第11周 總第34次 學(xué)時:2教學(xué)班級:軟件專業(yè)各班 課程:C語言程序設(shè)計 授課教師:劉暢課題:鏈表上機(jī)操作教學(xué)方法:演示 教具:多媒體計算機(jī)教學(xué)目標(biāo):熟練掌握結(jié)構(gòu)體以及結(jié)構(gòu)體數(shù)組、指針及函數(shù)教學(xué)重點(diǎn):鏈表的使用教學(xué)難點(diǎn):鏈表的插入、刪除、查找過程主要教學(xué)內(nèi)容:鏈表的上機(jī)操作小結(jié):課后回顧:沈陽職業(yè)技術(shù)學(xué)院教案用紙四個一:提問:結(jié)構(gòu)體的三種定義方式導(dǎo)入:上節(jié)課我們學(xué)習(xí)了結(jié)構(gòu)體的基本知識、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體函數(shù)以及結(jié)構(gòu)體
指針的相關(guān)知識,這節(jié)課我們通過習(xí)題鞏固上節(jié)課學(xué)習(xí)的知識。正文:備注鏈表上機(jī)一一學(xué)生成績管理系統(tǒng)、問題描述設(shè)計一個學(xué)生管理系統(tǒng)。該系統(tǒng)可以建立學(xué)生信息表,向表中插入新記錄,刪除某記錄,或在表中查找某特定的學(xué)生信息??奢斎胍唤M學(xué)生成績,包括每名學(xué)生的學(xué)號,姓名,語文、數(shù)學(xué)和英語成績,建立學(xué)生成績信息表。可加入新學(xué)生信息到學(xué)生成績表中,或刪除表中的某個位置的學(xué)生,或在表中查找某位置的學(xué)生并將該學(xué)生的信息顯示出來。在主函數(shù)中設(shè)計一個菜單,將要進(jìn)行的操作用0?4來表示,允許用戶輸入相應(yīng)的數(shù)字來進(jìn)行反復(fù)操作。、數(shù)據(jù)結(jié)構(gòu)其主要的數(shù)據(jù)類型為帶頭結(jié)點(diǎn)的單鏈表:typedefstructnode{intnumber;charname[20];intChinese,math,english;structnode *next;}LinkList;三、程序流程1.函數(shù)之間的調(diào)用關(guān)系圖程序流程圖如圖12-1所示。/*學(xué)生的學(xué)號*//*姓名*//*語文、數(shù)學(xué)和英語成績*/結(jié)構(gòu)體基本知識的使用。如何使用結(jié)構(gòu)體解決問題。圖12-1 ”學(xué)生成績管理系統(tǒng)”程序流程圖2.主要函數(shù)(1)初始化鏈表:LinkLiSt*InitList()。(2)求鏈表長度:intLength_List(LinkLiSt*H)。(3)建立鏈表函數(shù):VoidCreateLiSt(LinkLiSt*H,intn)。(4)表中元素定位函數(shù):LinkLiSt*Locate(LinkList*H,intnum)。(5)查找表中元素位置函數(shù):LinkLiSt*GetList(LinkList*H,inti)。(6)在鏈表中插入新元素函數(shù):intInSLiSt(LinkLiSt*p,LinkListx)。(7)在給定位置i插入元素函數(shù):intIns_List(LinkLiSt*H,inti,LinkListx)。(8)刪除鏈表中的某元素函數(shù):intDelLiSt(LinkLiSt*p,LinkList*x)。(9)刪除鏈表中給定位置的元素函數(shù):intDeLLiSt(LinkLiSt*H,inti,LinkList*x)。(10)主函數(shù)中的菜單顯示函數(shù):out()。(11)輸出表中信息函數(shù):voidDisLinkList(LinkList*H)。(12)主函數(shù):main()。四、完整程序完整程序如下:#include"stdio.h"#include"string.h"typedefcharElemType;#defineOK 1#defineERROR0#defineOVER-1typedefstructnode{intnumber;charname[20];intChineSe,math,english;structnode*next;}LinkList;/*操作成功返回1*//*錯誤為0*//*結(jié)束為-1*//*學(xué)生學(xué)號*//*學(xué)生姓名*//*學(xué)生語文、數(shù)學(xué)和英語成績*//*指向下一結(jié)點(diǎn)的指針*//*定義學(xué)生結(jié)點(diǎn)類型*/結(jié)構(gòu)體是一種變量類型,我們可以定義各種類型的數(shù)組,當(dāng)然也可以定義結(jié)構(gòu)體的數(shù)組。/初始化鏈表/LinkList*InitList(){LinkList*H;/*申請一塊LinkList類型的存儲單元的操作,并將其地址賦值給頭指針變量H*/H=(LinkLiSt*)malloc(sizeof(LinkList));H->next=NULL;return(H); /*頭結(jié)點(diǎn)H指針域為空,表示空鏈表*/}/******************求鏈表長度*************************/int{Length_LiSt(LinkLiSt*H)LinkList*p;intj=0;P=H;While(P->next!=NULL){p=p->next;j++;}returnj;/*p指向鏈表的頭結(jié)點(diǎn)*//*判斷P所指結(jié)點(diǎn)后面是否為空*//*P向所指結(jié)點(diǎn)的后面移動*//*計數(shù)器值增1*//*計數(shù)器j的值為表長度*/}/*****************建立鏈表函數(shù)************************/voidCreateLiSt(LinkLiSt*H,intn){inti;LinkList*s,*last;charch;last=H;/*last始終指向尾結(jié)點(diǎn),開始時指向頭結(jié)點(diǎn)*/}for(i=1;i<=n;i++) /*循環(huán)輸入各學(xué)生成績*/{S=(LinkList*)malloc(sizeof(LinkList));/*生成新結(jié)點(diǎn)*/Printf("\n請輸入第%~個學(xué)生的學(xué)號:",i);scanf("%d”,&s->number);Printf("\n請輸入第%~個學(xué)生的姓名:",i);scanf("%s”,s->name);Printf("\n請輸入第%~個學(xué)生的語文、數(shù)學(xué)和英語成績:",i);
scanf("%d%d%d”,&s->chinese,&s->math,&s->english);s->next=NULL; /*將新結(jié)點(diǎn)的指針域為空*/last->next=s; /*將新結(jié)點(diǎn)插入表尾*/last=s; /*將last指針指向表尾*/}/*********************表中元素定位函數(shù)*******************/LinkList*Locate(LinkList*H,intnum){LinkList*p;p=H->next; /*p指向鏈表的第一個結(jié)點(diǎn)*/While(P!=NULL&&p->number!=num)p=p->next;returnp;}/查找表中元素位置函數(shù)/LinkList*GetList(LinkList*H,inti){LinkList*p;intj=0;p=H; /*p指向鏈表的頭結(jié)點(diǎn)*/while(p->next!=NULL&&j<i){p=p->next;j++;}if(j==i) /*判斷與給定的序號是否相等*/returnp;elsereturnNULL;}/******************在鏈表中插入新元素函數(shù)******************/intInsList(LinkList*p,LinkListx){LinkList*s;s=(LinkList*)malloc(sizeof(LinkList));s->number=x.number;strcpy(s->name,);s->chinese=x.chinese;s->math=x.math;s->english=x.english;s->next=p->next;p->next=s;returnOK;/*將數(shù)據(jù)放入新結(jié)點(diǎn)的數(shù)據(jù)域*//*將新結(jié)點(diǎn)的指針域與P結(jié)點(diǎn)后面元素相連*//*將新結(jié)點(diǎn)插入鏈表*/}/****************在給定位置i插入元素函數(shù)*****************/intIns_List(LinkList{LinkList*p;p=GetList(H,i-1);if(p!=NULL){InsList(P,x);returnOK;}*H,inti,LinkListx)/*調(diào)用按序號查找第i個元素地址p函數(shù)*//*判斷查找的元素地址p是否存在*//*調(diào)用在已知結(jié)點(diǎn)P后插入結(jié)點(diǎn)算法函數(shù)*/結(jié)構(gòu)體在指針中的應(yīng)用。如何使用指針間接引用結(jié)構(gòu)體中的數(shù)據(jù)。結(jié)構(gòu)體指針作為函數(shù)如何傳遞數(shù)據(jù)。elsereturnERROR;}/*******************刪除鏈表中的某元素函數(shù)*******************/int{DelList(LinkList*p,LinkList*x)LinkList*s;s=P->next;x->number=s->number;StrcPy(x->name,s->name);x->chinese=s->chinese;x->math=s->math;x->english=s->english;P->next=s->next;free(s);returnOK;/*s為要刪除結(jié)點(diǎn)*//*將要刪除的數(shù)據(jù)賦予指針變量X*//*將P結(jié)點(diǎn)的指針域與s結(jié)點(diǎn)后面元素相連*//*釋放結(jié)點(diǎn)s*/}/*****************刪除鏈表中給定位置的元素函數(shù)***************/int{Del_List(LinkList*H,inti,LinkList*x)LinkList*p;P=GetList(H,i-1);/*調(diào)用按序號查找第i-1個元素地址P函數(shù)*/if(p!=NULL&&p->next!=NULL) /*判斷查找的元素地址P是否存在*/{DelLiSt(P,x);returnOK;}elsereturnERROR;/*調(diào)用刪除已知結(jié)點(diǎn)p之后結(jié)點(diǎn)函數(shù)*/}/**********************主函數(shù)中的菜單顯示********************/out(){Printf("?n******************************************");Printf("?n請輸入序號(0-4)選擇要進(jìn)行的操作:");Printf("?n0Printf("?n1Printf("?n2Printf("?n3Printf("?n4退出");建立一個學(xué)生信息表”);插入一個學(xué)生信息");刪除一個學(xué)生信息”);查找一個學(xué)生是否在該學(xué)生信息表中”);Printf("?n****************************************** ?n");}/**********************輸出表中信息函數(shù)********************/voidDiSLinkLiSt(LinkLiSt*H){LinkList*p;printf("?n所有學(xué)生的信息如下:");printf("?n學(xué)號姓名p=H->next;While(P!=NULL)語文數(shù)學(xué)英語?n");{Printf("%2d%10s%9d%9d%9d?n",P->number,P->name,P->chinese,P->math,P->english);P=P->next;}}/******************主函數(shù)****************************/main(){LinkList*H,*P,*q,x;inti,n,menux,flag,num;clrscr(); /*清屏*/out();H=InitList();scanf("%d”,&menux);do{switch(menux) /*用來判斷用戶要進(jìn)行何種操作*/{Case0:exit(0);break;/*退出*//*建立一個學(xué)生信息表*/Printf("\n請輸入要生成的學(xué)生信息表的元素個數(shù):");scanf("%d",&n);CreateList(H,n);Printf("\n建立的學(xué)生信息表為:\n");DisLinkList(H);break;/*在學(xué)生信息表中插入一個元素*/Printf("\n請輸入要插入的學(xué)生位置");scanf("%d",&i);Printf("\n請輸入要插入的學(xué)生信息:");Printf("\n請輸入學(xué)生的學(xué)號:");scanf("%d",&x.number);Printf("\n請輸入學(xué)生的姓名:");scanf("%s",);Printf("\n請輸入學(xué)生的語文、數(shù)學(xué)和英語成績:");scanf("%d%d%d",&x.chinese,&x.math,&x.english);flag=Ins_List(H,i,x);if(flag){ Printf("\n插入后的學(xué)生信息表為:");DisLinkList(H);}break;/*在學(xué)生信息表中刪除一個元素*/Printf("\n請輸入要刪除的學(xué)生的位置:");scanf("%d",&i);flag=Del_List(H,i,&x);if(flag){printf("\n刪除第%d個學(xué)生后,表中信息為:",i);DisLinkList(H);}break;/*在學(xué)生信息表中查找某學(xué)號學(xué)生信息*/Printf("\n請輸入查找的學(xué)生學(xué)號:\n");scanf("%d",&num);if((q=Locate(H,num))!=NULL){printf("\n在學(xué)生信息表中存在著學(xué)號為%d的學(xué)生!,num);printf("\n學(xué)號姓名語文數(shù)學(xué)英語\n");Printf("%2d%10s%9d%9d%9d",q->number,q->name,q->chinese,q->math,q->english);}elseprintf("\n在學(xué)生信息表中不存在著學(xué)號為%d的學(xué)生!,num);break;default:printf("\n輸入選項錯誤,請重新輸入(0-4)!");}out();scanf("%d”,&menux);}while(1);}五、程序運(yùn)行步驟及結(jié)果說明:程序運(yùn)行自動顯示的信息無下畫線,用戶輸入的信息用下畫線顯示,“/”表示回車。本程序有主菜單,設(shè)有0?4五個選項,每次可以輸入0?4來執(zhí)行相關(guān)操作,并且每次執(zhí)行完后都會重新顯示菜單,當(dāng)輸入。時結(jié)束該程序。程序一次運(yùn)行結(jié)果如下: 請輸入序號(0-4)選擇要進(jìn)行的操作:0 退出建立一個學(xué)生信息表插入一個學(xué)生信息刪除一個學(xué)生信息4 查找一個是否在該學(xué)生信息表中1/請輸入要生成的學(xué)生信息表的元素個數(shù):2/請輸入第1個學(xué)生的學(xué)號:1/請輸入第1個學(xué)生的姓名:liu/請輸入第1個學(xué)生的語文、數(shù)學(xué)和英語成績:788889/請輸入第2個學(xué)生的學(xué)號:2/請輸入第2個
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新工業(yè)廠房租賃合同
- 2024聘用培訓(xùn)講師附帶課程內(nèi)容更新與維護(hù)合同3篇
- 2024物業(yè)公司提供住宅小區(qū)環(huán)境綜合整治合同
- 《胃腸手術(shù)的配合》課件
- 寶馬國網(wǎng)充電合作協(xié)議
- 全國山西經(jīng)濟(jì)版小學(xué)信息技術(shù)第一冊第二單元活動1《芝麻開門》說課稿
- 集訓(xùn)04 世界古代史選擇題100題(答案解析)
- 農(nóng)田水利土方施工合同
- 飛行器制造工程專業(yè)就業(yè)能力展示
- 2024租賃定金合同協(xié)議書
- 本田凌派說明書
- 原有建筑保護(hù)施工方案范本
- 土地整治投標(biāo)方案(完整技術(shù)標(biāo))
- 銷售訂單評審表
- 某煤礦潰倉事故專項安全風(fēng)險辨識評估報告示例
- 《光是如何傳播的》說課稿
- 【幼兒園班本課程研究文獻(xiàn)綜述4100字(論文)】
- 上頜竇瘺修補(bǔ)術(shù)課件
- 支部書記辭職申請書
- 碾壓砼壩異種混凝土同步澆筑上升施工工法
- 屋面及防水工程施工(第二版)PPT完整全套教學(xué)課件
評論
0/150
提交評論