


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)二 鏈表操作實(shí)現(xiàn)實(shí)驗(yàn)日期:2017年旦月16日實(shí)驗(yàn)?zāi)康募耙?. 熟練掌握線性表的基本操作在鏈?zhǔn)酱鎯ι系膶?shí)現(xiàn);2. 以線性表的各種操作(建立、插入、刪除、遍歷等)的實(shí)現(xiàn)為重點(diǎn);3. 掌握線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)的定義和基本操作的實(shí)現(xiàn);4. 通過本實(shí)驗(yàn)加深對 C語言的使用(特別是函數(shù)的參數(shù)調(diào)用、指針類型的應(yīng)用)實(shí)驗(yàn)容已知程序文件linklist.cpp已給出學(xué)生身高信息鏈表的類型定義和基本運(yùn)算函數(shù)定義(1) 鏈表類型定義typedef struct int xh; /* 學(xué)號 */float sg; /* 身高 */int sex; /*性別,0為男生,1為女生*/ datatype;typed
2、ef struct nodedatatype data;/* 數(shù)據(jù)域 */struct node *next;/* 指針域 */ Lin kNode, *Lin kList;(2) 帶頭結(jié)點(diǎn)的單鏈表的基本運(yùn)算函數(shù)原型LinkListinitList();/* 置一個空表(帶頭結(jié)點(diǎn))*/void createList_1(LinkList head);/* 創(chuàng)建單鏈表 */void createList_2(LinkList head);/* 創(chuàng)建單鏈表 */void sort_xh(LinkList head);/* 單鏈表排序 */void reverse(LinkList head);/*
3、對單鏈表進(jìn)行結(jié)點(diǎn)倒置*/void Error(char *s);/*自定義錯誤處理函數(shù)*/void pntList(LinkList head);/* 打印單鏈表 */void save(LinkList head,char strname);/*保存單鏈表到文件 */任務(wù)一創(chuàng)建程序文件 linklist.cpp ,其代碼如下所示,理解 LinkList 類型和基本運(yùn)算函數(shù) 后回答下列問題。#include <stdio.h>#include <stdlib.h>/* 單鏈表結(jié)點(diǎn)類型 */typedef struct int xh; /* 學(xué)號*/float sg; /
4、*身高 */int sex; /*性別, 0為男生, 1為女生*/ datatype;typedef struct nodedatatype data; /* 數(shù)據(jù)域 */struct node *next; /* 指針域 */ LinkNode, *LinkList;/* 帶表頭的單鏈表的基本運(yùn)算函數(shù) */LinkList initList();/* 置一個空表(帶頭結(jié)點(diǎn)) */void createList_1(LinkList head);/* 創(chuàng)建單鏈表 */void createList_2(LinkList head);/* 創(chuàng)建單鏈表 */void sort_xh(LinkLis
5、t head);/* 單鏈表排序 */void reverse(LinkList head);/* 單鏈表倒置 */void Error(char *s);/* 自定義錯誤處理函數(shù) */void pntList(LinkList head);/* 打印單鏈表 */void save(LinkList head,char strname);/*保存單鏈表到文件 */*置一個空表 */LinkList initList() LinkList p; p=(LinkList)malloc(sizeof(LinkNode);p->next=NULL;return p;/*創(chuàng)建單鏈表 */void
6、createList_1(LinkList head) FILE *fp;int xh;float sg;int sex;LinkList p;if(fp=fopen("records.txt","r")=NULL) Error("can not open file !");return ;while(!feof(fp) fscanf(fp,"%d%f%d",&xh,&sg,&sex); p=(LinkList)malloc(sizeof(LinkNode); p->data.xh=x
7、h; p->data.sg=sg; p->data.sex=sex; p->next=head->next; head->next=p;fclose(fp);/* 創(chuàng)建單鏈表 */void createList_2(LinkList head) FILE *fp;int xh;float sg;int sex;LinkList p,rear;if(fp=fopen("records.txt","r")=NULL) Error("can not open file !");return ;rear=head
8、;while(!feof(fp) fscanf(fp,"%d%f%d",&xh,&sg,&sex); p=(LinkList)malloc(sizeof(LinkNode); p->data.xh=xh; p->data.sg=sg; p->data.sex=sex; p->next=NULL; rear->next=p;rear=p;fclose(fp);/* 單鏈表排序 */void sort_xh(LinkList head)LinkList q,p,u; p=head->next;head->next
9、=NULL;/* 利用原表頭結(jié)點(diǎn)建新的空表 */while(p) q=p; /*q 為被插入的結(jié)點(diǎn) */ p=p->next;/*用p記錄后繼結(jié)點(diǎn)*/*遍歷新鏈表查找插入位置 */ u=head;while(u->next!=NULL)/* 查找插入位置 */ if(u->next->data.xh>q->data.xh)break; u=u->next;/*插入在u結(jié)點(diǎn)的后面*/ q->next=u->next;u->next=q;/*單鏈表倒置 */void reverse(LinkList head) LinkList p, r
10、;p=head->next; head->next=NULL;while(p) r=p;p=p->next;/*r 指向結(jié)點(diǎn)頭插到鏈表 */ r->next=head->next;head->next=r;/*輸出單鏈表 */ void pntList(LinkList head) LinkList p; p=head->next;while(p!=NULL)printf("%2d: %.2f %dn",p->data.xh,p->data.sg,p->data .sex); p=p->next;/*自定義錯
11、誤處理函數(shù) */ void Error(char *s) printf("n %s", s);exit(1); /*返回OS該函數(shù)定義在stdlib.h中*/*保存單鏈表到文件*/void save(L in kList head,char strn ame) FILE *fp;Lin kList p;if(fp=fope n(strname,"w")=NULL) prin tf("ca n not ope n file !");return ;p=head->n ext;while(p!=NULL) fprin tf(fp,&
12、quot;%2d %5.2f %2dn",p->data.xh,p->data.sg,p->data.sex); p=p->n ext;fclose(fp);請回答下列問題:(1) 由單鏈表結(jié)點(diǎn)類型定義可知,該鏈表結(jié)點(diǎn)類型名為LinkNode ,結(jié)點(diǎn)的指針類變量new中的語句是:型為Lin kList,向系統(tǒng)申請一個學(xué)生結(jié)點(diǎn)空間并把起始地址存于上述結(jié)點(diǎn)指針p=(Li nkList)malloc(sizeof(L in kNode);(2) 回答問題:A畫出執(zhí)行head=initList();語句后的鏈表結(jié)構(gòu)示意headnpa) 已知:LinkList head
13、 ;圖* 順序:1-13-7-15-2b) 在a)操作的基礎(chǔ)上,根據(jù)records.txt中的數(shù)據(jù),畫出執(zhí)行createList_1(head); 語句后的鏈表結(jié)構(gòu)示意圖headheadc)在b)操作的基礎(chǔ)上,畫出執(zhí)行sort_xh(head)語句后的鏈表結(jié)構(gòu)示意圖d)在c)操作的基礎(chǔ)上,畫出執(zhí)行reverse(head)語句后的鏈表結(jié)構(gòu)示意圖heade)在d)操作的基礎(chǔ)上,寫出執(zhí)行pntList(head);語句后屏幕輸出結(jié)果(3)寫出下列操作對應(yīng)的執(zhí)行語句(以下的指針變量的類型都是上述定義的結(jié)點(diǎn)指 針類型)a)把一個new指針指向的結(jié)點(diǎn)頭插到以h為頭指針帶表頭結(jié)點(diǎn)的單鏈表中 的語句n ew
14、- >n ext=h->n ext;h->n ext=n ew;b)把一個new指針指向的結(jié)點(diǎn)頭插到以h為頭指針不帶表頭結(jié)點(diǎn)的單鏈表 中的語句n ew- >n ext=h;h=n ew;c)在單鏈表中刪除r所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)(假設(shè)存在)的語句r->n ext=r- >n ext- >n extd) 分別寫出循環(huán)及非循環(huán)單鏈表中判斷r所指結(jié)點(diǎn)是尾結(jié)點(diǎn)(假設(shè)存在) 的條件循環(huán):r->next= =NULL非循環(huán):r->n ext!=NULL任務(wù)二1 .題目要求創(chuàng)建一個新的程序文件sy12.cpp,請調(diào)用linklist.cpp提供的功能函數(shù)(以
15、#include “ linklist.cpp方式導(dǎo)入函數(shù)庫)及自定義的函數(shù)完成以下操作:從數(shù)據(jù)文件records.txt中讀取學(xué)生信息,建立與源數(shù)據(jù)同序的學(xué)生鏈表并打 印在屏幕上;統(tǒng)計(jì)學(xué)生鏈表中身高達(dá)標(biāo)人數(shù)(男女生的身高達(dá)標(biāo)值由鍵盤輸入),并打印結(jié) 果;從鍵盤輸入一位學(xué)生的相關(guān)信息插入到已排序的學(xué)生身高鏈表中后仍然 保持學(xué)號的有序性;對上述操作后的學(xué)生鏈表進(jìn)行倒置,結(jié)果輸出到數(shù)據(jù)文件result.txt中;刪除鏈表中身高為指定值的所有學(xué)生結(jié)點(diǎn)并打印;在程序文件sy12.cpp需再定義以下三個功能函數(shù):(1) int count(LinkList head,float sg_fm,float
16、sg_m)功能:已知女生達(dá)標(biāo)身高為sg_fm,男生達(dá)標(biāo)身高為sg_m,統(tǒng)計(jì)head為頭指針 的學(xué)生鏈表中身高達(dá)標(biāo)人數(shù)并返回;(2) void insertX(LinkList head, datatype x)功能:在學(xué)號從小到大排序的學(xué)生鏈表中插入值為x的學(xué)生仍保持學(xué)號的有序性(3) int delete(LinkList head,float sg)功能:刪除head為頭指針的學(xué)生鏈表中指定身高的所有學(xué)生結(jié)點(diǎn),刪除成功返 回1,否則返回0;2 .請根據(jù)題目功能要求或程序中的注釋完整sy12.cpp代碼#in clude "li nklist.cpp"int count(
17、LinkList head,float sg_fm,float sg_m);/* 統(tǒng)計(jì) head為頭指針的學(xué)生鏈表中 身高達(dá)標(biāo)人數(shù)并返回*/void insertX(LinkList head, datatype x);/*在學(xué)號從小到大排序的學(xué)生鏈表中插入 值為x的學(xué)生仍保持學(xué)號的有序性*/int delete(LinkList head,float sg);/*刪除head為頭指針的學(xué)生鏈表中指定身高的所 有學(xué)生結(jié)點(diǎn),刪除成功返回1,否則返回0*/void mai n() Lin kList head;int c,flag;float sg,sg_fm,sg_m;datatype x;/*
18、建立與源數(shù)據(jù)文件同序的學(xué)生鏈表并輸出;*/head= initList() ; /* 建空鏈表 */一createList_2(head);/*調(diào)用建鏈表函數(shù)建立所需鏈表*/printf("n與數(shù)據(jù)文件同序的學(xué)生鏈表:n");pntList(head) ; /*調(diào)用函數(shù)打印輸出鏈表息*/ getchar();/*統(tǒng)計(jì)學(xué)生鏈表中身高達(dá)標(biāo)人數(shù)(男女生的身高達(dá)標(biāo)值由鍵盤輸入)并打印結(jié) 果;*/printf("n輸入達(dá)標(biāo)的女生、男生身高值:");sca nf("%f%f", &sg_fm, &sg_m);c=count( he
19、ad, sg_fm, sg_m );printf("n達(dá)標(biāo)學(xué)生人數(shù)為:%d",c);getchar();/*對學(xué)生鏈表按學(xué)號進(jìn)行排序*/sort_xh(head);/*在學(xué)生鏈表中插入指定的學(xué)生元素后使鏈表仍按學(xué)號有序*/x.xh=3;x.sg=1.67;x.sex=0;insertX( head, x);prin tf("n new list after in sert:n");pn tList(head);getchar();/*對學(xué)生鏈表進(jìn)行倒置,結(jié)果輸出到文件result.txt中;*/reverse(head);save(head,"
20、result.txt");getchar();/*刪除鏈表中身高為指定值的所有學(xué)生結(jié)點(diǎn);*/sg=1.67;flag= dele(head, sg);if(flag)prin tf("ndelete succeed!' n");elseprin tf("ndelete failed'n");prin tf("n new list after delete:' n");pn tList(head);getchar();統(tǒng)計(jì)學(xué)生鏈表中身高達(dá)標(biāo)人數(shù)并返回(sg_fm女生身高達(dá)標(biāo)值、sg_m男生身高達(dá)標(biāo)值)int count(LinkList head,float sg_fm,float sg_m) int n=0;LinkList p; p = head->next;while (p != NULL)if (p->data.sex = 1)/*sex:1 女生 */if (p->data.sg >= sg_fm) n+; else if (p->data.sg &
溫馨提示
- 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è)合同審查文書規(guī)范指南
- 小工程施工安全合同協(xié)議書
- 《加法結(jié)合律 》(教學(xué)設(shè)計(jì)) -2024-2025學(xué)年 北師大版四年級數(shù)學(xué)上冊
- 咸寧職業(yè)技術(shù)學(xué)院《電子測試技術(shù)(下)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西藍(lán)天航空職業(yè)學(xué)院《地學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 汕頭職業(yè)技術(shù)學(xué)院《環(huán)境前沿與熱點(diǎn)講座》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶科技學(xué)院《室內(nèi)軟裝飾設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州護(hù)理職業(yè)技術(shù)學(xué)院《軟件體系結(jié)構(gòu)與設(shè)計(jì)模式》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北美術(shù)學(xué)院《牙體牙髓病學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆輕工職業(yè)技術(shù)學(xué)院《管理文秘》2023-2024學(xué)年第二學(xué)期期末試卷
- 企業(yè)承包經(jīng)營合同范本
- 2025年01月公安部第三研究所公開招聘人民警察筆試筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 光纜線路施工安全協(xié)議書范本
- 《我國國有企業(yè)股權(quán)融資效率實(shí)證研究》相關(guān)概念及國內(nèi)外文獻(xiàn)綜述2600字
- 2025-2030全球鋰電池用隔膜行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年湖南交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 成本合約規(guī)劃培訓(xùn)
- 交通法規(guī)教育課件
- 小學(xué)校長任期五年工作目標(biāo)(2024年-2029年)
- 2022-2024年浙江中考英語試題匯編:閱讀理解(說明文)教師版
- 第1課 中國古代政治制度的形成與發(fā)展 課件-歷史統(tǒng)編版(2019)選擇性必修1國家制度與社會治理
評論
0/150
提交評論