版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要:本學(xué)期我完成的主要實(shí)驗(yàn)任務(wù)有1、斐波那契序列,2、約瑟夫環(huán),3、算術(shù)表達(dá)式的求值4、赫夫曼樹,5、成績(jī)統(tǒng)計(jì)程序。在每個(gè)試驗(yàn)中分別進(jìn)行了概要設(shè)計(jì)和儲(chǔ)存結(jié)構(gòu)分析、主要算法分析、實(shí)驗(yàn)結(jié)果和結(jié)論分析等。并且對(duì)本學(xué)期所寫程序提供相關(guān)數(shù)據(jù)結(jié)構(gòu)理論和對(duì)本課程的相關(guān)建議。關(guān)鍵字:數(shù)據(jù)結(jié)構(gòu)、實(shí)驗(yàn)、算法、分析、結(jié)論、結(jié)果實(shí)驗(yàn)一實(shí)驗(yàn)名稱:斐波那契序列實(shí)驗(yàn)?zāi)康募耙螅菏煜ら_發(fā)工具的編程環(huán)境。體會(huì)算法和程序的不同。學(xué)習(xí)用不同算法實(shí)現(xiàn)同一程序功能,并能熟練編程實(shí)現(xiàn)。4.學(xué)習(xí)分析算法。對(duì)比不同算法實(shí)現(xiàn)的效率有何不同,所占空間有何不同。對(duì)比不同算法的優(yōu)點(diǎn)和缺點(diǎn)。要求:試編寫求k階(k>=2)裴波那契序列的第m項(xiàng)值的不同算法,并編程實(shí)現(xiàn)。k和m均以值調(diào)用的形式在函數(shù)參數(shù)中表現(xiàn)。要求:至少用兩種不同的算法(如,遞推、遞歸等等)。實(shí)驗(yàn)主要內(nèi)容:概要設(shè)計(jì)和存儲(chǔ)結(jié)構(gòu)概要設(shè)計(jì):先定義一個(gè)數(shù)組,用來儲(chǔ)存從鍵盤輸入的數(shù)據(jù),通過調(diào)用核心算法,最終實(shí)現(xiàn)斐波那契序列本實(shí)驗(yàn)的存儲(chǔ)結(jié)構(gòu)是第一個(gè)程序使用了一個(gè)一數(shù)組,用來儲(chǔ)存第m項(xiàng)的值,第二程序是開辟了一個(gè)空間用來接收用函數(shù)返回的值主要算法intk,m,a[20],i,sum=0;scanfk//intk,m,a[20],i,sum=0;scanfk//輸入一個(gè)k的值for(i=0;i<=k;i++){if(i==k)a[i]=1;elsea[i]=0;} //對(duì)前k項(xiàng)經(jīng)行賦值Scanfm//輸入m的值for(i=k+1;i<=m;i++){sum=sum-a[i-k-1]+a[i-1];a[i]=sum;}printfa[m]}intt(intm,intk);〃聲明函數(shù)intm1,k1,s;scanf kl;〃輸入k1的值scanf ml;//輸入mlprintf s=t(m1,k1));〃輸出第m項(xiàng)的值intt(intm,intk){if(m<=k-1)return0;elseif(m==k+1||m==k)return1;else return(2*t(m-1,k)-t(m-k-1,k));//計(jì)算第m項(xiàng)的值}//定義函數(shù)〃輸出第m項(xiàng)的值253實(shí)驗(yàn)結(jié)果和結(jié)論253取a[0]=0,a[1]=1;所以a[4]=3取a[0]=0,a[1]=0;a[2]=1,584所以a[4]=2584a[0]=0,a[1]=0,a[2]=0,a[3]=0,a[4]=1;所以a[8]=4-實(shí)驗(yàn)分析:第一個(gè)程序是先輸入前k項(xiàng),則第k+1項(xiàng)的值等于前k的和減去第1項(xiàng)的值,循環(huán)m-k次,就能求出第m項(xiàng)的值。第二個(gè)函數(shù)是從數(shù)學(xué)的方法推到一個(gè)公式2*t(m-1,k)-t(m-k-1,k),通過這個(gè)公式來實(shí)現(xiàn)求第m項(xiàng)的值。實(shí)驗(yàn)二實(shí)驗(yàn)名稱:約瑟夫環(huán)實(shí)驗(yàn)?zāi)康募耙螅杭僭O(shè)有n個(gè)編號(hào)為1,2,3,…,n的人按順時(shí)針方向圍坐一圈,每人持有一個(gè)密碼(正整數(shù))。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)的上限值m從第一個(gè)人開始按順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,并將其密碼值作為新的m值,從他在順時(shí)針方向上的下一個(gè)人開始重新從1報(bào)數(shù),以此類推下去,直到所有的人全部出列為止。試設(shè)計(jì)一個(gè)程序,可以在用戶確定了人數(shù)和密碼的情況下,求出對(duì)應(yīng)的出列順序。本實(shí)驗(yàn)的目的是1、熟悉開發(fā)工具的編程環(huán)境。2、 體會(huì)算法和程序的不同。3、 學(xué)習(xí)用不同算法實(shí)現(xiàn)同一程序功能,并能熟練編程實(shí)現(xiàn)。4、 學(xué)習(xí)分析算法。對(duì)比不同算法實(shí)現(xiàn)的效率有何不同,所占空間有何不同。對(duì)比不同算法的優(yōu)點(diǎn)和缺點(diǎn)。實(shí)驗(yàn)主要內(nèi)容:概要設(shè)計(jì)和存儲(chǔ)結(jié)構(gòu)本次試驗(yàn)是定義一個(gè)結(jié)構(gòu)體用來儲(chǔ)存密碼、序號(hào)、和指針等變量在主函數(shù)中創(chuàng)建一個(gè)單鏈表,通過調(diào)用核心算法和循環(huán)函數(shù)查找要?jiǎng)h除的變量和刪除該變量等操作等本實(shí)驗(yàn)的儲(chǔ)存結(jié)構(gòu)是在本程序中定義了一個(gè)鏈表作為儲(chǔ)存單位,將序號(hào)和密碼都放在里面structyue*p1,*p2,*p3,*p4;n=1;p1=p2=p3=p4=(structyue*)malloc(LEN);p1->num=1;scanf("%d",&p1->password);
while(n<7){p1=(structyue*)malloc(LEN);p2->next=p1;p2=p1;scanf("%d",&p1->password);p1->num=++n;}p2->next=p3;首先開辟七個(gè)空間,并用指針指向首節(jié)點(diǎn),將序號(hào)和密碼放入鏈表的相應(yīng)位置,將最后的指針指向首節(jié)點(diǎn),形成環(huán)。主要算法p1=p2=p3=p4=(structyue*)malloc(LEN);//開辟首節(jié)點(diǎn)p1->num=1;scanfp1->password;//對(duì)首節(jié)點(diǎn)進(jìn)行賦值,輸入序號(hào)和密碼while(n<7){p1=(structyue*)malloc(LEN);p2->next=p1;p2=p1;scanf("%d",&p1->password);p1->num=++n;}while(n>1){structyue*s;for(i=1;i<(m%n);p2=p1,p1=p1->next,iwhile(n>1){structyue*s;for(i=1;i<(m%n);p2=p1,p1=p1->next,i++);//找出刪除點(diǎn)p2->next=p1->next;s=p1;printfs->num//輸出該結(jié)點(diǎn)m=s->password;p1=p1->next;free(s);//釋放節(jié)點(diǎn)n--;//形成循環(huán)鏈表-實(shí)驗(yàn)結(jié)果和結(jié)論147235Pressanykeytocontinue-實(shí)驗(yàn)分析:在本程序中用一個(gè)鏈表作為儲(chǔ)存單位,形成循環(huán)鏈表,用一個(gè)for循環(huán)找到要?jiǎng)h除的節(jié)點(diǎn),用一個(gè)while循環(huán)輸出要輸出的序號(hào)實(shí)驗(yàn)三實(shí)驗(yàn)名稱:算術(shù)表達(dá)式的求值實(shí)驗(yàn)?zāi)康募耙螅阂宰址蛄行问綇慕K端輸入語(yǔ)法正確的、不含變量的整數(shù)表達(dá)式。利用課本3.2.5節(jié)中給出的算符優(yōu)先關(guān)系,實(shí)現(xiàn)對(duì)算術(shù)四則混合運(yùn)算表達(dá)式的求值,并仿照課本上的例子演示在求值過程中運(yùn)算符棧、運(yùn)算數(shù)棧、輸入字符和主要操作的變化過程。實(shí)驗(yàn)?zāi)康模?、熟悉開發(fā)工具的編程環(huán)境。2、 體會(huì)算法和程序的不同。3、 學(xué)習(xí)用不同算法實(shí)現(xiàn)同一程序功能,并能熟練編程實(shí)現(xiàn)。4、 學(xué)習(xí)分析算法。對(duì)比不同算法實(shí)現(xiàn)的效率有何不同,所占空間有何不同。對(duì)比不同算法的優(yōu)點(diǎn)和缺點(diǎn)。實(shí)驗(yàn)主要內(nèi)容:?概要設(shè)計(jì)和存儲(chǔ)結(jié)構(gòu)本次試驗(yàn)是通過分別定義三個(gè)不同的結(jié)構(gòu)體,然后定義不同的調(diào)用函數(shù),運(yùn)算符函數(shù),最后通過主函數(shù)調(diào)用各個(gè)函數(shù),實(shí)現(xiàn)算術(shù)表達(dá)式的求值。本實(shí)驗(yàn)的存儲(chǔ)結(jié)構(gòu)是在本程序中分別開辟了兩個(gè)棧分別儲(chǔ)存數(shù)據(jù)和運(yùn)算符,在開辟的時(shí)候運(yùn)用調(diào)用函數(shù)的方式進(jìn)行的。主要算法statueEvaluateExpression(){InitStack(OPTR);Push(OPTR,'#');initStack(OPND);c=getchar();while(c!='#'||GetTop(OPTR)!='#'){if(!In(c,OP)){Push((OPND),c);c=getchar();}elseswitch(Precede(GetTop(OPTR),c)){case'<':Push(OPTR,c);c=getchar();break;case'=':Pop(OPTR,x);c=getchar();break;case'>':Pop(OPTR,theta);Pop(OPND,b);Pop(OPND,a);Push(OPND,Operate(a,theta,b));break;}//switch}returnGetTop(OPND);}//主要函數(shù),實(shí)現(xiàn)表達(dá)式的求值實(shí)驗(yàn)結(jié)果和結(jié)論P(yáng)leaseenteraexpressionenduith'if%.:3*<7-2>ttTheresultis15-000000Pressa:i^比亡¥toexitPressanvkeytocontinue取3*(7-2);結(jié)果15PleaseenteraexpressionendwithJ#J:1+2+3+4#Theresul七is1^.000000Pressart#keytoexitPressans*keytoconti.nue取1+2+3+4;結(jié)果10Pleaseenteraexpressionendwith*#J-5*8/4#TheresultisPressanvkeytoexitPressanpkeyt雞continue取5*8/4,結(jié)果10-實(shí)驗(yàn)分析:本次程采取的是總分式的,一個(gè)主程序調(diào)用其他函數(shù)的形式,每一個(gè)函數(shù)都需要定義,主題程序采用棧儲(chǔ)存,在函數(shù)定義過程中用到了一維數(shù)組、二維數(shù)組。實(shí)驗(yàn)四實(shí)驗(yàn)名稱:赫夫曼樹實(shí)驗(yàn)?zāi)康募耙螅阂粋€(gè)完整的系統(tǒng)應(yīng)具有以下功能:(1) 初始化。從終端讀入字符集大小n以及n個(gè)字符和n個(gè)權(quán)值,建立哈夫曼樹,并將它存儲(chǔ)于文件hfmtree中。(2) 編碼。利用建好的哈夫曼樹,對(duì)要傳輸?shù)奈募obefile中的正文進(jìn)行編碼,然后將結(jié)果存入另一個(gè)文件codefile中。(3) 譯碼。利用建好的哈夫曼樹將文件codefile中的代碼進(jìn)行譯碼,結(jié)果存入文件文件textfile中。(4)印代碼文件。將文件codefile以緊湊格式顯示在終端屏幕上,每行50個(gè)代碼,同時(shí)將此字符形式的編碼文件寫入文件codeprin中。(5)印哈夫曼樹。將已在內(nèi)存中的哈夫曼樹以直觀的形式(樹或凹入表或其它形式)顯示在終端上,同時(shí)將此字符形式的哈夫曼樹寫入文件treeprint中。實(shí)驗(yàn)主要目的是1、熟悉開發(fā)工具的編程環(huán)境。2、體會(huì)算法和程序的不同。3、學(xué)習(xí)用不同算法實(shí)現(xiàn)同一程序功能,并能熟練編程實(shí)現(xiàn)。4、學(xué)習(xí)分析算法。對(duì)比不同算法實(shí)現(xiàn)的效率有何不同,所占空間有何不同。對(duì)比不同算法的優(yōu)點(diǎn)和缺點(diǎn)。實(shí)驗(yàn)主要內(nèi)容:概要設(shè)計(jì)和存儲(chǔ)結(jié)構(gòu)恒合法個(gè)數(shù)n枸造喑夫曼樹哈夫恒合法個(gè)數(shù)n枸造喑夫曼樹哈夫曼汩碼至輸?shù)凇疙?yè)共19頁(yè)場(chǎng)入各個(gè)字芹懸其枚値?「在大量的應(yīng)用中,人們?cè)褂枚喾N形式的存儲(chǔ)結(jié)構(gòu)來表示樹,在本試驗(yàn)中所用的存儲(chǔ)結(jié)構(gòu)是數(shù)組,定義了一個(gè)數(shù)組來存儲(chǔ)赫夫曼樹。主要算法typedefstruct{//哈弗曼樹和赫夫曼編碼的存儲(chǔ)表示unsignedintweight;unsignedintparent,lchild,rchild;}HENode,*HuffmanTree;//動(dòng)態(tài)分配數(shù)組存儲(chǔ)哈弗曼樹typedefchar**HuffmanCode;//動(dòng)態(tài)分配存儲(chǔ)哈弗曼編碼表}//無棧非遞歸遍歷哈弗曼樹,求哈弗曼編碼HC=(HuffmanCode)malloc((n+1)*sizeof(char*));p=m;cdlen=0;for(i=1;i<=m;++i)Ht[i].weight=0;//遍歷哈弗曼樹是用作結(jié)點(diǎn)狀態(tài)標(biāo)志while(p){//向左voidHuffmanCoding(HuffmanTree&HT,Huffmancode&HC,int*w,intn){//w存放n個(gè)字符的權(quán)值(均>0),構(gòu)造赫夫曼樹HT,并求出n個(gè)字符的赫夫曼編碼HC。if(n<=1)return;m=2*n-1;HT=(HuffmanTree),malloc((m+1)*sizeof(HTNode));//0號(hào)單元未用for(p=HT+1,i=1;i<=n;++n,++p,++w)*p={*w,0,0,0};for(;i<=m;++i,++p)*p={0,0,0,0};for(i=n+1;i<=m;++i){//建赫夫曼樹//在HT[l..i-l]選擇parent為0且weight最小的兩個(gè)結(jié)點(diǎn),其序號(hào)分別為s1和s2。Select(HT,i-1,s1,s2);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;if(HT[p].weight==0){HC[p].weight=1;if(HC[p].lchild!=0){p=HT[p].lchild;cd[cdlen++]="0";}elseif(HT[p].lchild==0){//登記葉子結(jié)點(diǎn)的字符的編碼HT[p]=(char*)malloc((cdlen+1)*sizeof(char));cd[cdlen]="\0";strcpy(HT[p].cd);//復(fù)制編碼(串)}}elseif(HC[p].weight==1){ //向右HC[p].weight=2;if(HC[p].rchild!=0){p=HT[p].rchild;cd[cdlen++]="1";}}else{//HC[p].weight==2,退回HC[p].weight=0;p=HC[p].parent;--cdlen;//退到父結(jié)點(diǎn),編碼長(zhǎng)度減1}//else}//while實(shí)驗(yàn)結(jié)果和結(jié)論輸入4請(qǐng)輸入你要編碼的赫夫曼樹字符種類個(gè)數(shù):4請(qǐng)輸入第1個(gè)字符及其權(quán)值并以空格分隔開=a1請(qǐng)輸入笫2個(gè)字符及其權(quán)值并以空格分隔開:碁備入第3個(gè)字符及其權(quán)值并以空格分隔開:備為入第4個(gè)字符及其權(quán)值并以空格分隔開:d4根據(jù)提示分別輸入4,Ei,bl2,Cs3,dI4R器no若要譯碼請(qǐng)喻人Y:若不譯碼嶽天'-輸九£斤要編譯的序列號(hào):010105JB1111S0011001010譯碼的文本是:decddbcddadcc倉(cāng)要譯碼請(qǐng)輸入曄若不譯碼輸入札Pressanvkeytocontinue根據(jù)提示,輸入0101000111100011001010實(shí)驗(yàn)分析:在這次的試驗(yàn)中,采用的是主程序調(diào)用函數(shù)的方式進(jìn)行的,在程序的開頭定義了結(jié)構(gòu)體,接著定義了四個(gè)函數(shù),以供后面的主函數(shù)調(diào)用,最后寫的主函數(shù),主函數(shù)簡(jiǎn)單明了的引導(dǎo)著程序的一步一步的進(jìn)行下去。實(shí)驗(yàn)五實(shí)驗(yàn)名稱:成績(jī)統(tǒng)計(jì)程序?qū)嶒?yàn)?zāi)康募耙螅航o出n個(gè)學(xué)生的m門考試的成績(jī)表,每個(gè)學(xué)生的信息由學(xué)號(hào)、姓名以及各科成績(jī)組成。對(duì)學(xué)生的考試成績(jī)進(jìn)行有關(guān)統(tǒng)計(jì),并打印統(tǒng)計(jì)表。1、假定有20位同學(xué),每位同學(xué)有四門課,分?jǐn)?shù)均為百分制。2、使用簡(jiǎn)單插入排序算法,按總數(shù)高低次序,打印出名次表,分?jǐn)?shù)相同的為同一名次;3、按名次打印出每個(gè)學(xué)生的學(xué)號(hào)、姓名、總分以及各科成績(jī)。實(shí)驗(yàn)主要目的是1、熟悉開發(fā)工具的編程環(huán)境。2、體會(huì)算法和程序的不同。3、學(xué)習(xí)用不同算法實(shí)現(xiàn)同一程序功能,并能熟練編程實(shí)現(xiàn)。4、學(xué)習(xí)分析算法。對(duì)比不同算法實(shí)現(xiàn)的效率有何不同,所占空間有何不同。對(duì)比不同算法的優(yōu)點(diǎn)和缺點(diǎn)。實(shí)驗(yàn)主要內(nèi)容:?概要設(shè)計(jì)和存儲(chǔ)結(jié)構(gòu)定義一個(gè)結(jié)構(gòu)體,里面定義一個(gè)八個(gè)變量,再分別定義所需要的調(diào)用的函數(shù),最后寫一個(gè)主函數(shù),在聲明函數(shù)的時(shí)候需要用到隨機(jī)函數(shù)struetaStu{char strName[20];//姓名intxh;//學(xué)號(hào)intEnglish;//英語(yǔ)成績(jī)intMath;//數(shù)學(xué)成績(jī)intChinese;//語(yǔ)文成績(jī)intsjjg;//數(shù)據(jù)結(jié)構(gòu)inttotal;//總成績(jī)intPlace;//名次};-主要算法Statuepaixu(int&I,structAddstu){for(inti=0;i<COUNT;i++)//輸入學(xué)生信息{printf(“該學(xué)生總成績(jī)是:%lf\n",AddStu());}
show();//在屏幕上輸出排序好的信息}voidshow(){OrderByScore();printf("學(xué)生成績(jī)排名");printf("\n名次學(xué)號(hào)姓名英語(yǔ)數(shù)學(xué)語(yǔ)文數(shù)據(jù)結(jié)構(gòu) 總成績(jī)");for(inti=0;i<COUNT;i++){printf("\n%d%d%s%d%d%d%ld%d\n",bstrStu[i].Place,bstrStu[i].xh,bstrStu[i].strName,bstrStu[i].English,bstrStu[i].Math,bstrStu[i].Chinese,bstrStu[i].sjjg,bstrStu[i].total);}}//按排名顯示實(shí)驗(yàn)結(jié)果和結(jié)論學(xué)號(hào)=206881126鮎瀘連薩:武晨該學(xué)生總成績(jī)是=236.000000請(qǐng)輸入學(xué)號(hào):200881127請(qǐng)影冷空姓名=王某該學(xué)生總成績(jī)?杲:282.000000依|邈欺11■22008811272^8811282^?811262^881128姓名
王某李某武晨張某學(xué)號(hào)=206881126鮎瀘連薩:武晨該學(xué)生總成績(jī)是=236.000000請(qǐng)輸入學(xué)號(hào):200881127請(qǐng)影冷空姓名=王某該學(xué)生總成績(jī)?杲:282.000000依|邈欺11■22008811272^8811282^?811262^881128姓名
王某李某武晨張某:200881128學(xué)號(hào)和姓名,有隨機(jī)函H學(xué)號(hào)和姓名,有隨機(jī)函數(shù)得到該200881128的總英語(yǔ)&蛍數(shù)學(xué)69語(yǔ)文65數(shù)據(jù)結(jié)構(gòu)685161638741724Pressanykeytocontinue4967總成績(jī)282262236234按回車鍵得到排名實(shí)驗(yàn)分析:本次程采取的是總分式的,一個(gè)主程序調(diào)用其他函數(shù)的形式,每一個(gè)函數(shù)都需要定義,主題程序采用結(jié)構(gòu)體儲(chǔ)存,在函數(shù)定義過程中用到了八個(gè)變量。綜合分析部分相關(guān)理論及實(shí)驗(yàn)結(jié)論本學(xué)期開設(shè)的《數(shù)據(jù)結(jié)構(gòu)》課程已經(jīng)告一段落,現(xiàn)就其知識(shí)點(diǎn)及其掌握情況、學(xué)習(xí)體會(huì)以及對(duì)該門課程試驗(yàn)等方面進(jìn)行學(xué)習(xí)總結(jié)。一、《數(shù)據(jù)結(jié)構(gòu)與算法》知識(shí)點(diǎn)在課本的第一章便交代了該學(xué)科的相關(guān)概念,如數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)類型以及數(shù)據(jù)結(jié)構(gòu)的定義。其中,數(shù)據(jù)結(jié)構(gòu)包括邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和運(yùn)算集合。邏輯結(jié)構(gòu)分為四類:集合型、線性、樹形和圖形結(jié)構(gòu),數(shù)據(jù)元素的存儲(chǔ)結(jié)構(gòu)分為:順序存儲(chǔ)、鏈接存儲(chǔ)、索引存儲(chǔ)和散列存儲(chǔ)四類。緊接著介紹了一些常用的數(shù)據(jù)運(yùn)算。最后著重介紹算法性能分析,包括算法的時(shí)間性能分析以及算法的空間性能分析。第二章具體地介紹了線性表的概念、基本運(yùn)算及其應(yīng)用?;具\(yùn)算有:初始化表、求表長(zhǎng)、排序、元素的查找、插入及刪除等。鏈表中數(shù)據(jù)元素的存儲(chǔ)不一定是連續(xù)的,還可以占用任意的、不連續(xù)的物理存儲(chǔ)區(qū)域。與順序表相比,鏈表的插入、刪除不需要移動(dòng)元素,給算法的效率帶來較大的提高。鏈表這一章中介紹了鏈表的節(jié)點(diǎn)結(jié)構(gòu)、靜態(tài)與動(dòng)態(tài)鏈表的概念、鏈表的基本運(yùn)算(如求表長(zhǎng)、插入、查找、刪除等)、單鏈表的建立(頭插法和尾插法)以及雙向循環(huán)鏈表的定義、結(jié)構(gòu)、功能和基本算法。第三章堆棧與隊(duì)列是兩種運(yùn)算受限制的線性結(jié)構(gòu)。其基本運(yùn)算方法與順序表和鏈表運(yùn)算方法基本相同,不同的是堆棧須遵循“先進(jìn)后出”的規(guī)則,對(duì)堆棧的操作只能在棧頂進(jìn)行;而隊(duì)列要遵循“先進(jìn)先出”的規(guī)則,教材中列出了兩種結(jié)構(gòu)的相應(yīng)算法,如入棧、出棧、入隊(duì)、出隊(duì)等。在介紹隊(duì)列時(shí),提出了循環(huán)隊(duì)列的概念,以避免“假溢出”的現(xiàn)象。第四章介紹了串的概念,串類型的定義,穿的變形和實(shí)現(xiàn),定長(zhǎng)順序存儲(chǔ)表示、堆分配存儲(chǔ)表示、串的塊鏈存儲(chǔ)表示,重點(diǎn)在于串的模式匹配。第五章介紹了數(shù)組和廣義表的概念與應(yīng)用。其中,特殊矩陣包括對(duì)稱矩陣、三角矩陣、對(duì)角矩陣和稀疏矩陣,書中分別詳細(xì)介紹了它們的存儲(chǔ)結(jié)構(gòu)。稀疏矩陣的應(yīng)用包括轉(zhuǎn)置和加法運(yùn)算等。最后介紹了廣義表的相關(guān)概念及存儲(chǔ)結(jié)構(gòu),關(guān)于它的應(yīng)用,課本中舉了m元多項(xiàng)式的表示問題。第六章二叉樹的知識(shí)是重點(diǎn)內(nèi)容。在介紹有關(guān)概念時(shí),提到了二叉樹的性質(zhì)以及兩種特殊的二叉樹:完全二叉樹和滿二叉樹。接著介紹二叉樹的順序存儲(chǔ)和鏈接存儲(chǔ)以及生成算法。重點(diǎn)介紹二叉樹的遍歷算法(遞歸算法、先序、中序和后序遍歷非遞歸算法)和線索二叉樹。二叉樹的應(yīng)用:基本算法、哈弗曼樹、二叉排序樹和堆排序。樹與二叉樹是不同的概念。教材介紹了樹和森林的概念、遍歷和存儲(chǔ)結(jié)構(gòu),還有樹、森林和二叉樹的相互關(guān)系,樹或森林怎樣轉(zhuǎn)化成二叉樹,二叉樹又如何轉(zhuǎn)換為樹和森林等算法。第七章介紹了圖的概念及其應(yīng)用,是本書的難點(diǎn)。圖的存儲(chǔ)結(jié)構(gòu)的知識(shí)點(diǎn)有:鄰接矩陣、鄰接表、逆鄰接表、十字鏈表和鄰接多重表。圖的遍歷包括圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷。其余知識(shí)點(diǎn)有:有向圖、連通圖、生成樹和森林、最短路徑問題和有向無環(huán)圖及其應(yīng)用。有向無環(huán)圖重點(diǎn)理解AOV網(wǎng)和拓?fù)渑判蚣捌渌惴ā?、?duì)各個(gè)實(shí)驗(yàn)的總結(jié)在實(shí)驗(yàn)一對(duì)比算法的時(shí)空效率之裴波那契序列中,通過兩種不同的遞推方法和一種遞歸方法,得出了實(shí)驗(yàn)結(jié)果,其中一種遞推方法是通過遞歸方法推出遞推方法的,主要是采用了temp[m]=2*temp[m-l]—temp[m-k-l]此公式采用了循環(huán)遞推以及遞推的方法得出結(jié)果。在定義存儲(chǔ)結(jié)構(gòu)時(shí)采用的是線性順序表的順序表示,即是用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表的數(shù)據(jù)元素。在設(shè)計(jì)和調(diào)試程序時(shí),我遇到的主要問題是無法實(shí)現(xiàn)求第m項(xiàng)的值,解決方案是改進(jìn)了for循環(huán)。本次實(shí)驗(yàn)不是很成功,但最后還是編出來了,因?yàn)楸救说哪芰τ邢?,所以剛開始只用了一種方法,后來慢慢想到了另外一種方法。經(jīng)過這次編程發(fā)c語(yǔ)言并不是很難,只是當(dāng)時(shí)沒有好好學(xué)習(xí),所以在以后的學(xué)習(xí)過程中,加強(qiáng)對(duì)c語(yǔ)言的學(xué)習(xí),在編程的過程中,遇到了開辟內(nèi)存的問題,我用的方法不是很好,分配的是靜態(tài)空間,這樣就會(huì)浪費(fèi)許多的空間,還有可能造成資源的浪費(fèi),應(yīng)該學(xué)會(huì)怎樣開辟動(dòng)態(tài)的空間,這樣就可以很有效地利用內(nèi)存資源,一個(gè)好的程序總是很精簡(jiǎn)的,而且效率是很高的,過多的語(yǔ)句只會(huì)造成資源的浪費(fèi),要學(xué)會(huì)精簡(jiǎn)語(yǔ)句,這樣才能編出好的程序。當(dāng)編出一道程序是是很令人高興的事,如果不經(jīng)常編程就會(huì)對(duì)c語(yǔ)言產(chǎn)生生疏感,就算簡(jiǎn)單的語(yǔ)句都會(huì)出錯(cuò),在編程的過程中一定細(xì)心,任何一個(gè)小的語(yǔ)法錯(cuò)誤都會(huì)造成編譯的通不過,這樣就會(huì)浪費(fèi)時(shí)間在實(shí)驗(yàn)二線性表及其應(yīng)用之約瑟夫環(huán)中,我采用了線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),是最常用且最簡(jiǎn)單的一種數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)言之,一個(gè)線性表是n個(gè)數(shù)據(jù)元素的有序序列,其特點(diǎn)是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素(這組存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的),線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)不要求邏輯上相鄰的元素在物理位置上相鄰,因此它沒有順序表存儲(chǔ)結(jié)構(gòu)所具有的弱點(diǎn),但是同時(shí)也失去了線性表的順序存儲(chǔ)結(jié)構(gòu)可隨機(jī)存取的優(yōu)點(diǎn)。在設(shè)計(jì)和調(diào)試程序時(shí),我遇到的主要問題是用兩個(gè)for無法準(zhǔn)確找出要?jiǎng)h除的節(jié)點(diǎn),解決方案是用一個(gè)while和for循環(huán),從新改變了算法,因?yàn)槟莻€(gè)算法有一些邏輯上的錯(cuò)誤。本次實(shí)驗(yàn)不是很順利,但最后還是編出來了,因?yàn)閯傞_始設(shè)計(jì)的程序有邏輯上的錯(cuò)誤,所以剛開始只用了一種比較不好的方法,后來改用了另外一種方法。經(jīng)過這次編程發(fā)c語(yǔ)言并還是很有趣的,只是當(dāng)時(shí)學(xué)習(xí)的不是很好,所以在以后的學(xué)習(xí)過程中,加強(qiáng)對(duì)C語(yǔ)言的學(xué)習(xí),在編程的過程中,遇到了尋找要?jiǎng)h除節(jié)點(diǎn)的問題,因?yàn)槟莻€(gè)發(fā)那個(gè)方法有邏輯上的錯(cuò)誤,在分配空間上也有一些問題,這樣就會(huì)浪費(fèi)許多的時(shí)間,而且造成在編程上出現(xiàn)了不穩(wěn)定性,應(yīng)該學(xué)會(huì)如何更好的用for循環(huán),這樣就可以很有效地節(jié)約時(shí)間,一個(gè)好的程序總是很精辟的,而且效率是很高的,過多的語(yǔ)句只會(huì)造成資源的浪費(fèi),要學(xué)會(huì)精簡(jiǎn)語(yǔ)句,這樣才能編出好的程序。當(dāng)編出一道程序是是很令人高興的事,如果不經(jīng)常編程就會(huì)對(duì)c語(yǔ)言產(chǎn)生生疏感。在實(shí)驗(yàn)三棧和隊(duì)列之算術(shù)表達(dá)式求值中,其實(shí)驗(yàn)?zāi)康脑谟谕ㄟ^上機(jī)實(shí)踐掌握隊(duì)列和棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便我們能在相應(yīng)的應(yīng)用問題中正確選用它們;掌握棧和隊(duì)列的特點(diǎn),即先進(jìn)后出與先進(jìn)先出的原則;掌握棧和隊(duì)列的基本運(yùn)算,如入棧和出棧、入隊(duì)與出隊(duì)等運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。此實(shí)驗(yàn)中的程序根據(jù)字符輸入,通過棧整個(gè)數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ),在定義棧時(shí),僅定義了一個(gè)棧的相關(guān)操作,建立兩個(gè)棧名稱數(shù)字或字符棧和操作符棧,先將輸入全設(shè)為字符,將字符全存入兩個(gè)棧中,通過函數(shù)調(diào)用將字符轉(zhuǎn)換為其相應(yīng)的字面數(shù)字進(jìn)行加減乘除運(yùn)算,最后得到最終結(jié)果,將運(yùn)算結(jié)果存儲(chǔ)于棧中并最終輸出相應(yīng)結(jié)果。在設(shè)計(jì)和調(diào)試程序時(shí),函數(shù)參數(shù)值的返回問題,開始不知道如何通過指針實(shí)現(xiàn)函數(shù)值的返回;不知道字符與數(shù)字之間如何實(shí)現(xiàn)數(shù)值上的相互等值轉(zhuǎn);在定義變量時(shí)不知道是否應(yīng)該定義為全局變量;在程序引入大量的函數(shù)模塊時(shí)出現(xiàn)處理不清,OPND語(yǔ)句就可運(yùn)行成功,其實(shí)沒有開辟相應(yīng)地址空間OPTR和OPND,應(yīng)該用new語(yǔ)句開辟相應(yīng)空間如STACKOPTR=newSqStack,OPND=newSqStack;。在設(shè)計(jì)和調(diào)試程序時(shí),我遇到的主要問題是有些函數(shù)定義不會(huì),個(gè)別函數(shù)的功能也不是很清楚。本次實(shí)驗(yàn)不是很順利,但最后費(fèi)力很長(zhǎng)的時(shí)間編出來了,由于我的c語(yǔ)言學(xué)的不是很好,所以有一些函數(shù)的實(shí)現(xiàn)確實(shí)不會(huì)編,后來后來問別人和書本上查了一些函數(shù)的實(shí)現(xiàn)方法。慢慢將全部的函數(shù)都實(shí)現(xiàn)了,主程序是書本上用的,通過本次編程是我認(rèn)識(shí)到自己在字符表示方面的不足,所以在以后的學(xué)習(xí)過程中,加強(qiáng)對(duì)字符和數(shù)組的學(xué)習(xí),在編程的過程中,還遇到了函數(shù)調(diào)用的問題,對(duì)其定義不是很了解,需要繼續(xù)好好學(xué)習(xí)C語(yǔ)言。在實(shí)驗(yàn)四樹和二叉樹之層序遍歷二叉樹中的先序遍歷、中序遍歷、后序遍歷、層序遍歷均采用遞歸算法,而構(gòu)建二叉樹時(shí)也采用的是遞歸算法。在層序遍歷中采用隊(duì)列的入隊(duì)進(jìn)隊(duì)的方法從而實(shí)現(xiàn)層序遍歷二叉樹。對(duì)于二
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能新能源汽車分期付款貸款協(xié)議書3篇
- 2025版?zhèn)€人房產(chǎn)買賣合同風(fēng)險(xiǎn)評(píng)估范本2篇
- 2025版?zhèn)€人房產(chǎn)買賣合同附土地使用協(xié)議
- 2025版托育中心拖育綜合服務(wù)中心改造項(xiàng)目合同3篇
- 2025版數(shù)據(jù)錄入與云端數(shù)據(jù)同步維護(hù)服務(wù)協(xié)議3篇
- 2025-2030全球微電腦注藥泵行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年度個(gè)人對(duì)個(gè)人短期投資借款合同
- 2024年民法典知識(shí)競(jìng)賽題庫(kù)及參考答案解析(共50題)
- 2025年度水電工程安全監(jiān)督與管理承包協(xié)議4篇
- 2025年度鋼材原材料采購(gòu)質(zhì)量控制合同樣本
- 2024年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 人教版初中語(yǔ)文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩(shī)詞名篇名句默寫
- 2024-2025學(xué)年人教版(2024)七年級(jí)(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- ESG表現(xiàn)對(duì)企業(yè)財(cái)務(wù)績(jī)效的影響研究
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 《精密板料矯平機(jī) 第2部分:技術(shù)規(guī)范》
- 2023-2024年同等學(xué)力經(jīng)濟(jì)學(xué)綜合真題及參考答案
- 農(nóng)村集體土地使用權(quán)轉(zhuǎn)讓協(xié)議
- 2024年高考全國(guó)甲卷英語(yǔ)試卷(含答案)
評(píng)論
0/150
提交評(píng)論