




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、項目(課內(nèi)實(shí)訓(xùn))指導(dǎo)書系 別: 計算機(jī)系 專 業(yè): 網(wǎng)絡(luò)工程 課 程: 數(shù)據(jù)結(jié)構(gòu) 制 訂 人: 理艷榮 審 核 人: 制訂時間: 2019年3月 第一部分 數(shù)據(jù)結(jié)構(gòu)實(shí)驗的目的、要求一、實(shí)驗?zāi)康纳蠙C(jī)實(shí)踐是各位對本門課程所學(xué)知識的一種全面、綜合的能力訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的必不可少的一個教學(xué)環(huán)節(jié),也是對課堂教學(xué)與實(shí)踐教學(xué)效果的一種檢驗。通常,實(shí)驗題中的問題比平時的習(xí)題復(fù)雜得多,也更接近實(shí)際。實(shí)驗著眼于原理與應(yīng)用的結(jié)合,使你們學(xué)會如何把書上學(xué)到的知識運(yùn)用于解決實(shí)際問題的過程中去,培養(yǎng)從事軟件開發(fā)設(shè)計工作所必需的基本技能;另一方面,能使書上的知識變“活”,起到深化理解和靈活掌握教學(xué)內(nèi)容
2、的目的。平時的練習(xí)較偏重于如何編寫功能單一的“小”算法,而實(shí)驗題是軟件設(shè)計的綜合訓(xùn)練,包括問題分析(需求分析)、總體結(jié)構(gòu)設(shè)計和用戶界面設(shè)計(概要設(shè)計)、程序設(shè)計基本技能和技巧等,即一整套軟件工程規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。此外,還有很重要的一點(diǎn)是:機(jī)器是比任何教師都嚴(yán)厲的主考者。為了達(dá)到上述目的,第二部分安排了實(shí)驗單元內(nèi)容,各單元的訓(xùn)練重點(diǎn)在于基本的數(shù)據(jù)結(jié)構(gòu),而不強(qiáng)調(diào)面面俱到。各實(shí)驗單元與教科書的各章具有緊密的對應(yīng)關(guān)系。 二、要求: 做好每一次上機(jī)前的準(zhǔn)備以提高上機(jī)效率: 預(yù)先認(rèn)真閱讀相關(guān)實(shí)驗內(nèi)容,做到心中有明確的目的要求和任務(wù),要有備而來,應(yīng)該自己獨(dú)立的思考和設(shè)計你的算法和程序,并
3、爭取在規(guī)定的時間內(nèi)如期完成上機(jī)工作任務(wù)。對于個別目前基礎(chǔ)較差的同學(xué),實(shí)在是沒法完成任務(wù)的建議你先參考其他同學(xué)的算法,勤學(xué)好問,最終自己獨(dú)立完成,以增強(qiáng)你的感性認(rèn)識,強(qiáng)化你的實(shí)踐基礎(chǔ),提高你的實(shí)踐能力。 按照實(shí)驗內(nèi)容規(guī)定的習(xí)題題目,事先在實(shí)驗預(yù)習(xí)報告上編寫好源程序及運(yùn)行程序所需的典型數(shù)據(jù),并經(jīng)人工靜態(tài)檢查認(rèn)為無誤;手編程序應(yīng)書寫整齊,應(yīng)在每個題目之間留出一定的空間,以備記錄上機(jī)調(diào)試情況和運(yùn)行結(jié)果等;對程序中自己有疑問的地方,應(yīng)作出記號,以便上機(jī)時給以注意。 將想要上機(jī)驗證的問題草擬提綱;制定一個簡捷的程序調(diào)試計劃。 上機(jī)時輸入和調(diào)式自己所編寫的程序。對“出錯信息”,應(yīng)善于自己分析判斷
4、,并充分利用開發(fā)工具提供的錯誤信息和調(diào)試手段解決出現(xiàn)的問題,及時修改與完善算法、源程序,隨時記錄有價值的內(nèi)容。解決問題是學(xué)習(xí)調(diào)式程序的良好機(jī)會。切不可不編程序或抄別人的程序去上機(jī),應(yīng)從養(yǎng)成嚴(yán)謹(jǐn)?shù)目茖W(xué)作風(fēng)。 程序調(diào)試通過后,應(yīng)運(yùn)行程序并根據(jù)事先準(zhǔn)備的典型數(shù)據(jù)驗證結(jié)果,在運(yùn)行時要注意在輸入不同數(shù)據(jù)時所得到的不同結(jié)果。 為便于教師、助教檢查和以后復(fù)習(xí),請不要刪除已通過的程序,包括有問題待答疑的程序,應(yīng)保存在自己的工作目錄內(nèi)。源程序名應(yīng)能反映哪一次實(shí)驗的哪一個題目,如Lab1_1.c表示實(shí)驗一的第1題,若有未完成調(diào)試的源程序,可以作存盤保存處理,待課后繼續(xù)完成。5、幾乎每個實(shí)驗
5、都有超出數(shù)據(jù)結(jié)構(gòu)課程標(biāo)準(zhǔn)的內(nèi)容,是為有能力深入學(xué)習(xí)或考研的同學(xué)準(zhǔn)備的,教師與學(xué)生可根據(jù)實(shí)際情況做取舍。 三、考核或評價標(biāo)準(zhǔn)實(shí)訓(xùn)成績將主要根據(jù)學(xué)生對待實(shí)訓(xùn)的態(tài)度、對關(guān)鍵知識點(diǎn)和編程技巧的掌握程度、實(shí)訓(xùn)報告的內(nèi)容、答辯情況等進(jìn)行綜合評定。最后的成績將分優(yōu)秀、良好、中等、及格和不及格五個等級。具體評判標(biāo)準(zhǔn)如下:優(yōu)秀:實(shí)訓(xùn)認(rèn)真、刻苦,有鉆研精神,不無故缺席。熟練掌握了本實(shí)訓(xùn)的關(guān)鍵知識點(diǎn),具有良好的獨(dú)立思考問題和解決問題的能力,具備了較好的運(yùn)用C語言處理數(shù)據(jù)結(jié)構(gòu)相應(yīng)類型能力,編制的程序運(yùn)行正確。實(shí)訓(xùn)記錄內(nèi)容豐富、齊全,答辯時能清晰明了地闡明問題,回答問題反映敏捷、思路清晰。優(yōu)秀的分?jǐn)?shù)段為100
6、分90分。良好:能認(rèn)真對待實(shí)訓(xùn),不無故缺席。掌握了本實(shí)訓(xùn)的關(guān)鍵知識點(diǎn),具備了較好的運(yùn)用C語言處理數(shù)據(jù)結(jié)構(gòu)相應(yīng)類型能力,編寫的程序運(yùn)行正確。實(shí)訓(xùn)記錄內(nèi)容齊全,答辯時能清晰明了地闡明問題,能正確回答全部問題。良好的分?jǐn)?shù)段為89分80分。中等:能認(rèn)真對待實(shí)訓(xùn),不無故缺席?;菊莆樟吮緦?shí)訓(xùn)的關(guān)鍵知識點(diǎn),具備了一定的運(yùn)用C語言處理數(shù)據(jù)結(jié)構(gòu)相應(yīng)類型能力,編寫的程序運(yùn)行基本正確,無致命錯誤。實(shí)訓(xùn)記錄內(nèi)容較齊全,答辯時能正確回答大部分問題。中等的分?jǐn)?shù)段為79分70分。及格:對待實(shí)訓(xùn)不夠認(rèn)真,有少量遲到、早退或無故缺席現(xiàn)象。基本掌握了本實(shí)訓(xùn)的主要內(nèi)容,具有了用運(yùn)用C語言處理數(shù)據(jù)結(jié)構(gòu)相應(yīng)類型能力,但掌握不全面、扎
7、實(shí),編寫的程序總體結(jié)構(gòu)符合要求,基本能正常運(yùn)行,但還存在少量錯誤。實(shí)訓(xùn)記錄內(nèi)容基本齊全,答辯時能在教師提示下正確回答大部分問題。及格分?jǐn)?shù)段為69分60分。不及格:對待實(shí)訓(xùn)馬虎、敷衍,經(jīng)常遲到、早退或無故缺席。不能正確理解本實(shí)訓(xùn)的主要內(nèi)容,不具備基本的運(yùn)用C語言處理數(shù)據(jù)結(jié)構(gòu)相應(yīng)類型能力,編制的程序不能正常運(yùn)行,或是抄襲他人程序,應(yīng)付答辯。答辯時即使經(jīng)教師提示仍不能正確回答大部分問題。不及格分?jǐn)?shù)段小于60分。第二部分 數(shù)據(jù)結(jié)構(gòu)實(shí)驗內(nèi)容預(yù)備實(shí)驗 C語言的函數(shù)數(shù)組指針結(jié)構(gòu)體知識一、實(shí)驗?zāi)康?、復(fù)習(xí)C語言中函數(shù)、數(shù)組、指針、結(jié)構(gòu)體與共用體等的概念。2、熟悉利用C語言進(jìn)行程序設(shè)計的一般方法。3、為其它實(shí)驗
8、提供答題參考。4、同學(xué)們可以把本小節(jié)程序直接復(fù)制到Microsoft Visual C+ 6.0環(huán)境中運(yùn)行即可。二、實(shí)驗預(yù)習(xí)說明以下C語言中的概念1、 函數(shù):略2、 數(shù)組:略3、指針:略4、結(jié)構(gòu)體略5、共用體略三、實(shí)驗內(nèi)容和要求(一)、調(diào)試程序:輸出100以內(nèi)所有的素數(shù)(用函數(shù)實(shí)現(xiàn))。#include<stdio.h>int isprime(int n) /*判斷一個數(shù)是否為素數(shù)*/ int m;for(m=2;m*m<=n;m+)if(n%m=0) return 0;return 1;int main() /*輸出100以內(nèi)所有素數(shù)*/int i; printf("
9、;n");for(i=2;i<100;i+)if(isprime(i)=1) printf("%4d",i);printf("n");return 0;運(yùn)行結(jié)果:(二)、 調(diào)試程序:對一維數(shù)組中的元素進(jìn)行逆序排列。#include<stdio.h>#define N 10int main()int aN=0,1,2,3,4,5,6,7,8,9,i,temp;printf("nthe original Array is:n ");for(i=0;i<N;i+)printf("%4d"
10、,ai);for(i=0;i<N/2;i+)/*交換數(shù)組元素使之逆序*/temp=ai;ai=aN-i-1;aN-i-1=temp;printf("nthe changed Array is:n");for(i=0;i<N;i+)printf("%4d",ai); printf("n");return 0;運(yùn)行結(jié)果:(三)、 調(diào)試程序:在二維數(shù)組中,若某一位置上的元素在該行中最大,而在該列中最小,則該元素即為該二維數(shù)組的一個鞍點(diǎn)。要求從鍵盤上輸入一個二維數(shù)組,當(dāng)鞍點(diǎn)存在時,把鞍點(diǎn)找出來。#include<stdio.
11、h>#define M 3#define N 4 int main()int aMN,i,j,k;printf("n請輸入二維數(shù)組的數(shù)據(jù):n");for(i=0;i<M;i+)for(j=0;j<N;j+)scanf("%d",&aij);for(i=0;i<M;i+)/*輸出矩陣*/for(j=0;j<N;j+)printf("%4d",aij);printf("n");for(i=0;i<M;i+)k=0;for(j=1;j<N;j+)/*找出第i行的最大值*/
12、if(aij>aik)k=j;for(j=0;j<M;j+)/*判斷第i行的最大值是否為該列的最小值*/if(ajk<aik)break;if(j=M)/*在第i行找到鞍點(diǎn)*/printf("%d,%d,%dn",aik,i,k);printf("n");return 0;運(yùn)行結(jié)果:(四)、 調(diào)試程序:利用指針輸出二維數(shù)組的元素。#include<stdio.h>int main()int a34=1,3,5,7,9,11,13,15,17,19,21,23;int *p;for(p=a0;p<a0+12;p+)if(
13、p-a0)%4=0) printf("n");printf("%4d",*p); printf("n");return 0;運(yùn)行結(jié)果:(五)、 調(diào)試程序:設(shè)有一個教師與學(xué)生通用的表格,教師的數(shù)據(jù)有姓名、年齡、職業(yè)、教研室四項,學(xué)生有姓名、年齡、專業(yè)、班級四項,編程輸入人員的數(shù)據(jù),再以表格輸出。#include <stdio.h>#define N 10struct studentchar name8;/*姓名*/int age; /*年齡*/char job; /*職業(yè)或?qū)I(yè),用s或t表示學(xué)生或教師*/union int
14、class;/*班級*/char office10; /*教研室*/depa;stuN;int main()int i; int n; printf("n請輸入人員數(shù)(<10人):"); scanf("%d",&n);for(i=0;i<n;i+)/*輸入n個人員的信息*/printf("請輸入第%d人員的信息:(name age job class/office)n",i+1);scanf("%s %d %c",, &stui.age, &stui.job);
15、if(stui.job='s')scanf("%d",&stui.depa.class); else scanf("%s",stui.depa.office);printf("name age job class/officen");for(i=0;i<n;i+)/*輸出*/if(stui.job='s')printf("%s %3d %3c %dn",, stui.age, stui.job, stui.depa.class); elseprintf
16、("%s %3d %3c %sn",, stui.age, stui.job, stui.depa.office);輸入的數(shù)據(jù):2Wang,19,s,99061Li 36 t computer運(yùn)行結(jié)果:(六)、設(shè)某班級有M(6)名學(xué)生,本學(xué)期共開設(shè)N(3)門課程, 要求實(shí)現(xiàn)如下程序(算法)。1. 輸入學(xué)生的學(xué)號、姓名和 N 門課程的成績(輸入提示和輸出顯示使用漢字系統(tǒng)),輸出實(shí)驗結(jié)果 。2. 計算每個學(xué)生本學(xué)期 N 門課程的總分,輸出總分和N門課程成績排在前 3 名學(xué)生的學(xué)號、姓名和成績。3. 按學(xué)生總分和 N 門課程成績關(guān)鍵字升序用選擇排序排列名次,總分
17、相同者同名次。/Seletsort.c#include "stdio.h"#include "string.h"#define M 6#define N 3void changesort(struct student a,int n,int j);void print_score(struct student a,int n,int j);struct student char name10; int number; int scoreN+1;/*scoreN為總分,score0-score2為學(xué)科成績*/ stuM;main() int i,j,k;
18、for (i=0;i<M;i+)/*輸入每個學(xué)生信息*/ printf("請輸入第 %d 名學(xué)生分?jǐn)?shù): ",i+1);printf("n"); printf("姓 名: "); scanf("%s",); printf("編 號: ");scanf("%4d",&stui.number); printf("數(shù)據(jù)結(jié)構(gòu): ");scanf("%4d",&stui.score0); printf(&qu
19、ot;離散數(shù)學(xué): ");scanf("%4d",&stui.score1);printf("大學(xué)英語: ");scanf("%4d",&stui.score2); for(i=0;i<M;i+)/*計算每個學(xué)生總分*/ stui.scoreN=0; for(j=0;j<N;j+) stui.scoreN+=stui.scorej; changesort(stu,M,N);/*對總分進(jìn)行排序*/printf(" 學(xué)生總分成績排序表n"); printf(" 名次 學(xué)號
20、姓 名 數(shù)據(jù)結(jié)構(gòu) 離散數(shù)學(xué) 大學(xué)英語 總 分n"); k=0; for(i=0;i<M+1;i+) if(i>0&&stui.scoreN!=stui-1.scoreN) k+; printf("%4d",k);printf(" %4d",stui-1.number);printf(" %s",);for(j=0;j<N+1;j+)printf(" %6d",stui-1.scorej); printf("n"); changes
21、ort(stu,M,0); /*對數(shù)據(jù)結(jié)構(gòu)成績進(jìn)行排序*/ print_score(stu,M,0); /*輸出數(shù)據(jù)結(jié)構(gòu)前 3 名同學(xué)成績*/ changesort(stu,M,1); /*對離散數(shù)學(xué)成績進(jìn)行排序*/ print_score(stu,M,1); /*輸出離散數(shù)學(xué)前 3 名同學(xué)成績*/ changesort(stu,M,2); /*對大學(xué)英語成績進(jìn)行排序*/ print_score(stu,M,2); /*輸出大學(xué)英語前 3 名同學(xué)成績*/ void changesort(struct student a,int n,int j) int flag=1,i,m,k;struct
22、student temp; while(flag) flag=0; for(i=0;i<n-1;i+) /*選擇排序法*/ k=i;for(m=i+1;m<n;m+) if (am.scorej>ak.scorej)k=m;temp=ai;ai=ak;ak=temp;flag=1; void print_score(struct student a,int n,int j) int i,k; printf(" 選擇交換 成績 %d 排序表",j+1); printf("n"); printf(" 名 次 學(xué) 號 姓 名 分 數(shù)
23、n"); k=1; for(i=0;k<N&&i<n;i+) if(i>0&&ai.scorej!=ai-1.scorej) k+; printf(" %4d ",k); printf("%4d",ai.number); printf(" %s",); printf(" %6d",ai.scorej); printf("n"); 簡單選擇排序:請輸入第 1 名學(xué)生分?jǐn)?shù):姓 名: 史孟晨編 號: 01數(shù)據(jù)結(jié)構(gòu): 87離散數(shù)學(xué)
24、: 90大學(xué)英語: 78請輸入第 2 名學(xué)生分?jǐn)?shù):姓 名: 袁欣編 號: 02數(shù)據(jù)結(jié)構(gòu): 78離散數(shù)學(xué): 80大學(xué)英語: 92請輸入第 3 名學(xué)生分?jǐn)?shù):姓 名: 趙宇編 號: 03數(shù)據(jù)結(jié)構(gòu): 88離散數(shù)學(xué): 76大學(xué)英語: 95請輸入第 4 名學(xué)生分?jǐn)?shù):姓 名: 滕芷編 號: 04數(shù)據(jù)結(jié)構(gòu): 79離散數(shù)學(xué): 84大學(xué)英語: 88請輸入第 5 名學(xué)生分?jǐn)?shù):姓 名: 張一析編 號: 05數(shù)據(jù)結(jié)構(gòu): 78離散數(shù)學(xué): 68大學(xué)英語: 91請輸入第 6 名學(xué)生分?jǐn)?shù):姓 名: 白曉彤編 號: 06數(shù)據(jù)結(jié)構(gòu): 88離散數(shù)學(xué): 76大學(xué)英語: 90 學(xué)生總分成績排序表 名次 學(xué)號 姓 名 數(shù)據(jù)結(jié)構(gòu) 離散數(shù)學(xué)
25、大學(xué)英語 總 分 1 3 趙宇 88 76 95 259 2 1 史孟晨 87 90 78 255 3 6 白曉彤 88 76 90 254 4 4 滕芷 79 84 88 251 5 2 袁欣 78 80 92 250 6 5 張一析 78 68 91 237 選擇交換 成績 1 排序表 名 次 學(xué) 號 姓 名 分 數(shù) 1 3 趙宇 88 1 6 白曉彤 88 2 1 史孟晨 87 3 4 滕芷 79 選擇交換 成績 2 排序表 名 次 學(xué) 號 姓 名 分 數(shù) 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 選擇交換 成績 3 排序表 名 次 學(xué) 號 姓 名 分 數(shù) 1 3 趙
26、宇 95 2 2 袁欣 92 3 5 張一析 91Press any key to continue輸入的數(shù)據(jù)及運(yùn)行結(jié)果截屏:四、心得體會本學(xué)期開設(shè)的數(shù)據(jù)結(jié)構(gòu)課程已經(jīng)告一段落,現(xiàn)就學(xué)習(xí)體會進(jìn)行學(xué)習(xí)總結(jié)。這是一門純屬于設(shè)計的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。剛開始學(xué)的時候確實(shí)有很多地方很不理解,每次上課時老師都會給我們出不同的設(shè)計題目,對于我們一個初學(xué)者來說,無疑是一個具大的挑戰(zhàn),撞了幾次壁之后,我決定靜下心來,仔細(xì)去寫程序。老師會給我們需要編程的內(nèi)容一些講解,順著老師的思路,來完成自己的設(shè)計,我們可以開始運(yùn)行自己的程序。這門課結(jié)束之后,我總結(jié)了學(xué)習(xí)中遇到的一些問題,最為突出的,書本上的知識與老師
27、的講解都比較容易理解,但是當(dāng)自己采用剛學(xué)的知識點(diǎn)編寫程序時卻感到十分棘手,有時表現(xiàn)在想不到適合題意的算法,有時表現(xiàn)在算法想出來后,只能將書本上原有的程序段謄寫到自己的程序中再加以必要的連接以完成程序的編寫。剛開始學(xué)的時候確實(shí)有很多地方我很不理解,每次上上機(jī)課時老師都會給我們出不同的設(shè)計題目,對于我們一個初學(xué)者來說,無疑是一個具大的挑戰(zhàn),撞了幾次壁之后,我決定靜下心來,仔細(xì)去寫程序。老師會給我們需要編程的內(nèi)容一些講解,順著老師的思路,來完成自己的設(shè)計,我們可以開始運(yùn)行自己的程序,可是好多處的錯誤讓人看的可怕,還看不出到底是哪里出現(xiàn)了錯誤,但是程序還是得繼續(xù)下去,我多次請教了老師和同學(xué),逐漸能自己
28、找出錯誤,并加以改正。TC里檢查錯誤都是用英文來顯示出來的,經(jīng)過了這次課程設(shè)計,現(xiàn)在已經(jīng)可以了解很多錯誤在英文里的提示,這對我來說是一個突破性的進(jìn)步,眼看著一個個錯誤通過自己的努力在我眼前消失,覺得很是開心。此次的程序設(shè)計能夠成功,是我和我的同學(xué)三個人共同努力作用的結(jié)果。在這一段努力學(xué)習(xí)的過程中,我們的編程設(shè)計有了明顯的提高。其實(shí)現(xiàn)在想起來,收獲還真是不少,雖然說以前非常不懂這門語言,在它上面花費(fèi)了好多心血,覺得它很難,是需用花費(fèi)了大量的時間編寫出來的?,F(xiàn)在真正的明白了一些代碼的應(yīng)用,每個程序都有一些共同點(diǎn),通用的結(jié)構(gòu),相似的格式。只要努力去學(xué)習(xí),就會靈活的去應(yīng)用它。以上便是我對數(shù)據(jù)結(jié)構(gòu)這門課
29、的學(xué)習(xí)總結(jié),我會抓緊時間將沒有吃透的知識點(diǎn)補(bǔ)齊,克服學(xué)習(xí)中遇到的難關(guān),在打牢基礎(chǔ)的前提下向更深入的層面邁進(jìn)!實(shí)驗一 順序表與鏈表一、實(shí)驗?zāi)康?、掌握線性表中元素的前驅(qū)、后續(xù)的概念。2、掌握順序表與鏈表的建立、插入元素、刪除表中某元素的算法。3、對線性表相應(yīng)算法的時間復(fù)雜度進(jìn)行分析。4、理解順序表、鏈表數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)(優(yōu)缺點(diǎn))。 二、實(shí)驗預(yù)習(xí)說明以下概念(到主要參考教材上查找答案)1、線性表:2、順序表:3、鏈表:三、實(shí)驗內(nèi)容和要求1、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。#include<stdio.h>#include<malloc.h>#d
30、efine ERROR 0#define OK 1#define INIT_SIZE 5 /*初始分配的順序表長度*/#define INCREM 5 /*溢出時,順序表長度的增量*/typedef int ElemType; /*定義表元素的類型*/typedef struct SqlistElemType *slist; /*存儲空間的基地址*/int length; /*順序表的當(dāng)前長度*/int listsize; /*當(dāng)前分配的存儲空間*/Sqlist;int InitList_sq(Sqlist *L); /* */int CreateList_sq(Sqlist *L,int n
31、); /* */int ListInsert_sq(Sqlist *L,int i,ElemType e);/* */int PrintList_sq(Sqlist *L); /*輸出順序表的元素*/int ListDelete_sq(Sqlist *L,int i); /*刪除第i個元素*/int ListLocate(Sqlist *L,ElemType e); /*查找值為e的元素*/int InitList_sq(Sqlist *L) L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType); if(!L->slist) r
32、eturn ERROR; L->length=0; L->listsize=INIT_SIZE; return OK; /*InitList*/int CreateList_sq(Sqlist *L,int n) ElemType e; int i; for(i=0;i<n;i+) printf("input data %d",i+1); scanf("%d",&e); if(!ListInsert_sq(L,i+1,e) return ERROR; return OK;/*CreateList*/*輸出順序表中的元素*/int
33、 PrintList_sq(Sqlist *L) int i; for(i=1;i<=L->length;i+) printf("%5d",L->slisti-1); return OK;/*PrintList*/int ListInsert_sq(Sqlist *L,int i,ElemType e) int k;if(i<1|i>L->length+1) return ERROR; if(L->length>=L->listsize) L->slist=(ElemType*)realloc(L->slis
34、t,(INIT_SIZE+INCREM)*sizeof(ElemType); if(!L->slist) return ERROR; L->listsize+=INCREM; for(k=L->length-1;k>=i-1;k-) L->slistk+1= L->slistk; L->slisti-1=e; L->length+; return OK;/*ListInsert*/*在順序表中刪除第i個元素*/int ListDelete_sq(Sqlist *L,int i)/*在順序表中查找指定值元素,返回其序號*/int ListLocat
35、e(Sqlist *L,ElemType e) int main() Sqlist sl; int n,m,k; printf("please input n:"); /*輸入順序表的元素個數(shù)*/ scanf("%d",&n); if(n>0) printf("n1-Create Sqlist:n"); InitList_sq(&sl); CreateList_sq(&sl,n); printf("n2-Print Sqlist:n"); PrintList_sq(&sl);
36、printf("nplease input insert location and data:(location,data)n"); scanf("%d,%d",&m,&k); ListInsert_sq(&sl,m,k); printf("n3-Print Sqlist:n"); PrintList_sq(&sl); printf("n"); else printf("ERROR"); return 0;l 運(yùn)行結(jié)果(運(yùn)行結(jié)果截屏粘貼到這里)l 算法分析(參照教
37、材上的“算法分析”部分填寫本部分內(nèi)容,)2、為第1題補(bǔ)充刪除和查找功能函數(shù),并在主函數(shù)中補(bǔ)充代碼驗證算法的正確性。刪除算法代碼:l 運(yùn)行結(jié)果l 算法分析查找算法代碼:l 運(yùn)行結(jié)果l 算法分析3、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1typedef int ElemType; /*定義表元素的類型*/typedef struct LNode /*線性表的單鏈表存儲*/ ElemType data; struct LNode
38、*next;LNode,*LinkList;LinkList CreateList(int n); /* */void PrintList(LinkList L); /*輸出帶頭結(jié)點(diǎn)單鏈表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /* */LinkList CreateList(int n) LNode *p,*q,*head; int i; head=(LinkList)malloc(sizeof(LNode); head->next=NULL; p=head; for(i=0;i<n;i+) q=(LinkList)ma
39、lloc(sizeof(LNode); printf("input data %i:",i+1); scanf("%d",&q->data); /*輸入元素值*/ q->next=NULL; /*結(jié)點(diǎn)指針域置空*/ p->next=q; /*新結(jié)點(diǎn)連在表末尾*/ p=q; return head;/*CreateList*/void PrintList(LinkList L) LNode *p; p=L->next; /*p指向單鏈表的第1個元素*/ while(p!=NULL) printf("%5d"
40、;,p->data); p=p->next; /*PrintList*/int GetElem(LinkList L,int i,ElemType *e) LNode *p;int j=1; p=L->next; while(p&&j<i) p=p->next;j+; if(!p|j>i) return ERROR; *e=p->data; return OK;/*GetElem*/int main() int n,i;ElemType e; LinkList L=NULL; /*定義指向單鏈表的指針*/ printf("pl
41、ease input n:"); /*輸入單鏈表的元素個數(shù)*/ scanf("%d",&n); if(n>0) printf("n1-Create LinkList:n"); L=CreateList(n); printf("n2-Print LinkList:n"); PrintList(L); printf("n3-GetElem from LinkList:n"); printf("input i="); scanf("%d",&i);
42、if(GetElem(L,i,&e) printf("No%i is %d",i,e); else printf("not exists"); else printf("ERROR"); return 0;l 運(yùn)行結(jié)果l 算法分析4、為第3題補(bǔ)充插入功能函數(shù)和刪除功能函數(shù)。并在主函數(shù)中補(bǔ)充代碼驗證算法的正確性。插入算法代碼:l 運(yùn)行結(jié)果l 算法分析刪除算法代碼:l 運(yùn)行結(jié)果l 算法分析以下為選做實(shí)驗:5、循環(huán)鏈表的應(yīng)用(約瑟夫回環(huán)問題)n個數(shù)據(jù)元素構(gòu)成一個環(huán),從環(huán)中任意位置開始計數(shù),計到m將該元素從表中取出,重復(fù)上述過程,直至
43、表中只剩下一個元素。提示:用一個無頭結(jié)點(diǎn)的循環(huán)單鏈表來實(shí)現(xiàn)n個元素的存儲。l 算法代碼6、設(shè)一帶頭結(jié)點(diǎn)的單鏈表,設(shè)計算法將表中值相同的元素僅保留一個結(jié)點(diǎn)。提示:指針p從鏈表的第一個元素開始,利用指針q從指針p位置開始向后搜索整個鏈表,刪除與之值相同的元素;指針p繼續(xù)指向下一個元素,開始下一輪的刪除,直至pnull為至,既完成了對整個鏈表元素的刪除相同值。l 算法代碼四、實(shí)驗小結(jié)實(shí)驗二 棧和隊列一、實(shí)驗?zāi)康?、掌握棧的結(jié)構(gòu)特性及其入棧,出棧操作;2、掌握隊列的結(jié)構(gòu)特性及其入隊、出隊的操作,掌握循環(huán)隊列的特點(diǎn)及其操作。二、實(shí)驗預(yù)習(xí)說明以下概念1、順序棧:2、鏈棧:3、循環(huán)隊列:4、鏈隊三、實(shí)驗內(nèi)容
44、和要求1、閱讀下面程序,將函數(shù)Push和函數(shù)Pop補(bǔ)充完整。要求輸入元素序列1 2 3 4 5 e,運(yùn)行結(jié)果如下所示。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存儲空間初始分配量*/#define STACKINCREMENT 5 /*存儲空間分配增量*/typedef int ElemType; /*定義元素的類型*/typedef struct ElemType *base; ElemType *top; int stacksiz
45、e; /*當(dāng)前已分配的存儲空間*/SqStack;int InitStack(SqStack *S); /*構(gòu)造空棧*/int push(SqStack *S,ElemType e); /*入棧*/int Pop(SqStack *S,ElemType *e); /*出棧*/int CreateStack(SqStack *S); /*創(chuàng)建棧*/void PrintStack(SqStack *S); /*出棧并輸出棧中元素*/int InitStack(SqStack *S) S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemT
46、ype); if(!S->base) return ERROR; S->top=S->base; S->stacksize=STACK_INT_SIZE; return OK;/*InitStack*/int Push(SqStack *S,ElemType e) /*Push*/int Pop(SqStack *S,ElemType *e) /*Pop*/int CreateStack(SqStack *S) int e; if(InitStack(S) printf("Init Success!n"); else printf("Ini
47、t Fail!n"); return ERROR; printf("input data:(Terminated by inputing a character)n"); while(scanf("%d",&e) Push(S,e); return OK;/*CreateStack*/void PrintStack(SqStack *S) ElemType e; while(Pop(S,&e) printf("%3d",e);/*Pop_and_Print*/int main() SqStack ss; pr
48、intf("n1-createStackn"); CreateStack(&ss); printf("n2-Pop&Printn"); PrintStack(&ss); return 0; l 算法分析:輸入元素序列1 2 3 4 5,為什么輸出序列為5 4 3 2 1?體現(xiàn)了棧的什么特性?2、在第1題的程序中,編寫一個十進(jìn)制轉(zhuǎn)換為二進(jìn)制的數(shù)制轉(zhuǎn)換算法函數(shù)(要求利用棧來實(shí)現(xiàn)),并驗證其正確性。l 實(shí)現(xiàn)代碼l 驗證3、閱讀并運(yùn)行程序,并分析程序功能。#include<stdio.h>#include<malloc.
49、h>#include<string.h>#define M 20#define elemtype chartypedef struct elemtype stackM; int top;stacknode;void init(stacknode *st);void push(stacknode *st,elemtype x);void pop(stacknode *st);void init(stacknode *st) st->top=0;void push(stacknode *st,elemtype x) if(st->top=M) printf("the stack is overflow!n"); else st->top=st->top+1; st->stackst->top=x; void pop(stacknode *st)if(st->top>0) st->top-; else printf(“Stack is Empty!n”);int main() char sM; int i; stacknode *sp; printf("create
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備設(shè)施包保管理制度
- 設(shè)計公司內(nèi)控管理制度
- 設(shè)計單位現(xiàn)場管理制度
- 設(shè)計項目人員管理制度
- 診所醫(yī)療器械管理制度
- 診斷試劑風(fēng)險管理制度
- 試驗示范基地管理制度
- 財務(wù)資金收支管理制度
- 貨倉搬運(yùn)安全管理制度
- 貨物海關(guān)代理管理制度
- 生活飲用水游離余氯方法驗證報告
- DB32∕T 186-2015 建筑消防設(shè)施檢測技術(shù)規(guī)程
- 巡檢培訓(xùn)課件.ppt
- 北師大版五下書法《第6課戈字旁》課件
- 二代征信系統(tǒng)數(shù)據(jù)采集規(guī)范釋義
- 蘇教版二年級(下冊)科學(xué)全冊單元測試卷含期中期末(有答案)
- 國家開放大學(xué)電大本科《設(shè)施園藝學(xué)》2023-2024期末試題及答案(試卷代號:1329)
- 數(shù)列求和(錯位相減法)
- 固廢中心廢氣處理方案
- 關(guān)于地理高考四大能力要求解讀
- 滅火救援作戰(zhàn)計劃圖例
評論
0/150
提交評論