數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì) 報(bào)告新的體會(huì)
在本次的課程設(shè)計(jì)中,我遇到了好多問(wèn)題,期間我苦苦思考了好長(zhǎng)時(shí)間,去解決我遇到的每個(gè)問(wèn)題,感覺(jué)問(wèn)題就是一串一串的,解決一個(gè)下一個(gè)就會(huì)在那等著,就像登山一樣,越來(lái)越累但風(fēng)景卻越來(lái)越好。承認(rèn)這學(xué)期我的學(xué)習(xí)沒(méi)有用心,尤其是數(shù)據(jù)結(jié)構(gòu),根本是聽(tīng)得一知半解,在做課程設(shè)計(jì)之前,我對(duì)雙向鏈表根本就是不知道更別提做設(shè)計(jì)了。我之前沒(méi)敢想,因?yàn)槲也粫?huì),因?yàn)槲也恢牢业娜松鷷?huì)走向哪里,沒(méi)有前進(jìn)的動(dòng)力和方向。真正做起來(lái),才發(fā)現(xiàn)自己到大學(xué)了,學(xué)的竟然是那么少,連結(jié)構(gòu)體的操作都那么陌生,面對(duì)比這樣一個(gè)問(wèn)題,開(kāi)始的前四天我基本上都在看以前的C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)書(shū)籍。我不想再樣混沌下去,我需要的是走出自己,好好把握自己,我沒(méi)有放棄,沒(méi)有被困難嚇到,以前就是以前了,現(xiàn)在我要好好的,認(rèn)真的對(duì)待我的人生。
我從簡(jiǎn)單的單向鏈表開(kāi)始建立,再慢慢構(gòu)建起雙向鏈表,之后對(duì)其賦值,建立起一個(gè)能夠插入,刪除,操作的測(cè)試程序,發(fā)現(xiàn)只要認(rèn)真去學(xué),沒(méi)有什么不可克服的困難,就這樣一個(gè)一個(gè)問(wèn)題的解決,慢慢我發(fā)現(xiàn)自己的程序慢慢壯大,一天一個(gè)進(jìn)步,不斷完善程序,根本沒(méi)想到我也能寫(xiě)出一個(gè)將近700行的程序,心中又是激動(dòng)又是感覺(jué)自己必須要更加努力,努力讓自己更好。
出錯(cuò)的時(shí)候我也很煩,因?yàn)橹R(shí)少不知道錯(cuò)在哪里,但慢慢的我不斷看到自己程序從不能運(yùn)行到出現(xiàn)完美結(jié)果,記得好幾次都是想問(wèn)題想得頭痛,但我還是堅(jiān)持了下來(lái),看到了我的成果。
事情只有自己經(jīng)歷過(guò)才來(lái)的徹底,來(lái)的深刻,程序?qū)嵺`性很強(qiáng),我還是動(dòng)手少,思考少,通過(guò)本次課程設(shè)計(jì),我學(xué)到了很多很多,也感悟了很多,我會(huì)好好改變自己當(dāng)前的狀態(tài),以飽滿(mǎn)的熱情去迎接明天的挑戰(zhàn),努力為未來(lái)
通過(guò)這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的實(shí)驗(yàn),在解決問(wèn)題的過(guò)程中,充分體會(huì)到了數(shù)據(jù)結(jié)構(gòu)這門(mén)課程對(duì)于軟件設(shè)計(jì)的重要性,也體會(huì)到了數(shù)據(jù)結(jié)構(gòu)+算法=程序這句話(huà)的真正含義,一個(gè)實(shí)際問(wèn)題的解決第一步就是要依賴(lài)于良好的抽象思維的,將實(shí)際問(wèn)題轉(zhuǎn)化為相應(yīng)的數(shù)據(jù)結(jié)構(gòu),只有這一步做好了,才能采取相應(yīng)的算法和優(yōu)化方法解決問(wèn)題和解決好問(wèn)題。
擴(kuò)展閱讀:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告 心得體會(huì) 鏈表 C語(yǔ)言
數(shù)據(jù)結(jié)
構(gòu)課程設(shè)計(jì)
設(shè)計(jì)題目:兩個(gè)鏈表的交叉合并
專(zhuān)業(yè)班級(jí):08軟件工程3班姓名:xxxxxx學(xué)號(hào):080107031123設(shè)計(jì)時(shí)間:201*/9/25指導(dǎo)教師:楊薇薇
一、設(shè)計(jì)題目
實(shí)現(xiàn)兩個(gè)鏈表的合并設(shè)計(jì)目的
1.掌握線(xiàn)性鏈表的建立。2.掌握線(xiàn)性鏈表的基本操作。設(shè)計(jì)內(nèi)容和要求
1.建立兩個(gè)鏈表A和B,鏈表元素個(gè)數(shù)分別為m和n個(gè)。2.假設(shè)元素分別為(x1,x2,xm),和(y1,y2,yn)。把它們合并成一個(gè)線(xiàn)形表C,使得:
當(dāng)m>=n時(shí),C=x1,y1,x2,y2,xn,yn,,xm當(dāng)n>m時(shí),C=y1,x1,y2,x2,ym,xm,,yn輸出線(xiàn)性表C。
3.用直接插入排序法對(duì)C進(jìn)行升序排序,生成鏈表D,并輸出鏈表D。
4.能刪除指定單鏈表中指定位子和指定值的元素。
二、運(yùn)行環(huán)境(軟、硬件環(huán)境)
軟件環(huán)境:VC++6.0編程軟件,運(yùn)行平臺(tái):Win32硬件:普通個(gè)人pc機(jī)、算法設(shè)計(jì)的思想
三、算法的流程圖
CreatA鏈表開(kāi)始
CreatB鏈表Mergel(A,B)交叉合并成對(duì)C排序生成D提示輸入0或1cmd=0cmd=1錯(cuò)誤輸入
輸入將要操作的鏈表的名字輸入將要操作的鏈表的名字Cmderror正確錯(cuò)誤正確錯(cuò)誤刪除,打印Nameerror刪除,打印Nameerror打印“over”結(jié)束
四、算法設(shè)計(jì)分析
這個(gè)兩個(gè)鏈表的交叉合并算法主要運(yùn)用到的是鏈表的基本操作,定義節(jié)點(diǎn),將鏈表的創(chuàng)建、計(jì)算鏈表的長(zhǎng)度、鏈表A,B的交叉組合、鏈表內(nèi)容升序排列、刪除鏈表指定位置元素、刪除指定的元素等算法寫(xiě)成了獨(dú)立函數(shù),通過(guò)主函數(shù)調(diào)用。這樣就大大精簡(jiǎn)了主函數(shù)的操作。但主函數(shù)中很大篇幅用到了if、else語(yǔ)句,用以指定鏈表指定結(jié)點(diǎn)和指定元素的刪除操作,這樣就使得本來(lái)很精簡(jiǎn)變得繁瑣,降低了程序的質(zhì)量。所以其有優(yōu)點(diǎn)和缺點(diǎn),但需要不斷的改進(jìn),不斷優(yōu)化該程序。
五、源代碼程序源代碼:
#include#include
typedefstructnode//節(jié)點(diǎn)定義{
intdata;
structnode*next;}node,*linklist;
linklistcreat(linklisthead)//該函數(shù)用來(lái)創(chuàng)建鏈表{
node*r,*s;inta;
r=(linklist)malloc(sizeof(node));head=r;
scanf("%d",&a);while(a!=0){
s=(node*)malloc(sizeof(node));s->data=a;r->next=s;r=s;
printf("pleaseinputadata:");scanf("%d",&a);}
r->next=NULL;returnhead;}
linklistlength(linklistl)//返回L中數(shù)據(jù)元素個(gè)數(shù){
inti=0;
linklistp=l->next;//p指向第一個(gè)結(jié)點(diǎn)while(p){
i++;
p=p->next;}
returni;}
linklistmergel(linklistA,linklistB)//用于實(shí)現(xiàn)鏈表A,B的交叉組合{
intm,n;
node*p,*q,*s,*t;linklistC;p=A->next;q=B->next;m=length(A);n=length(B);C=A;if(mnext;q=A->next;C=B;}
while(p&&q){
s=p->next;p->next=q;if(s){
t=q->next;q->next=s;}p=s;q=t;}
returnC;}
linklistsort(linklistL)//{
linklistp,q,min;inttemp;p=L;
while(p=p->next){
q=min=p;
while(q=q->next){
if(q->datadata)min=q;
鏈表內(nèi)容升序排列
}if(min!=p){
temp=p->data;
p->data=min->data;min->data=temp;}}
returnL;}
linklistDelete(linklistl,intindex)//刪除鏈表指定位置元素{linklistp,t;
intcx=1;//用于計(jì)數(shù)p=l;
if(indexnext=p->next;}
else
printf("inputindexterror");returnl;}
linklistDelete_element(linklistl,intdata)//刪除指定的元素{linklistp;p=l;
if(p->next){
while(p->next->data!=data){
p=p->next;}
p->next=p->next->next;
}else
printf("don"tfaindtheelement");
returnl;}
linklistdisplay(linklistl)//打印{linklistp;
printf("newlinklist:\\n");p=l->next;while(p){
printf("%d\\n",p->data);p=p->next;}returnl;}
main(){
linklistp,q,A,B,C,D;intindexs;intdatas;charname;intcmd;
printf("CreatlinklistA:\\n");//創(chuàng)建A鏈表,并打印printf("pleaseinputadata:");A=creat(A);
printf("CreatlinklistB:\\n");//創(chuàng)建B鏈表,并打印printf("pleaseinputadata:");B=creat(B);
C=mergel(A,B);//生成C鏈表,并打印printf("linklistC\\n");p=C->next;while(p){
printf("%d\\n",p->data);p=p->next;
}D=C;//對(duì)C進(jìn)行排序生成Dsort(D);
printf("linklistD:\\n");q=D->next;while(q){
printf("%d\\n",q->data);q=q->next;}
printf("\\npleaseinput0or1\\n");
//用1和0判斷是按位置刪除還是直接刪除元素scanf("%d",&cmd);
if(cmd==0)//位置刪除{
printf("pleaseinputlinklistname\\n");fflush(stdin);
scanf("%c",&name);
printf("\\npleaseinputindex\\n");scanf("%d",&indexs);fflush(stdin);if(name=="A"){
Delete(A,indexs);display(A);}
elseif(name=="B"){
Delete(B,indexs);display(B);}
elseif(name=="C"){
Delete(C,indexs);display(C);}
elseif(name=="D"){
Delete(D,indexs);display(D);}
else
printf("nameError");}
elseif(cmd==1)//元素刪除{
fflush(stdin);//清除緩沖printf("pleaseinputlinklistname\\n");//fflush(stdin);scanf("%c",&name);
printf("\\npleaseinputdatas\\n");scanf("%d",&datas);if(name=="A"){
Delete_element(A,datas);display(A);}
elseif(name=="B"){
Delete_element(B,datas);display(B);}
elseif(name=="C"){
Delete_element(C,datas);display(C);}
elseif(name=="D"){
Delete_element(D,datas);display(D);}
else
printf("name2error");}
else
printf("cmdError");
printf("\\nOver\\n");getchar();return0;}
六、運(yùn)行結(jié)果分析截圖:
結(jié)果分析:大體來(lái)說(shuō),該程序都實(shí)現(xiàn)了課程設(shè)計(jì)的算法要求及功能,但還是有很多問(wèn)題,由于時(shí)間問(wèn)題該算法做得比較粗糙,還不能很好的處理問(wèn)題,例如,如果想在一次操作完成后還像再次操作,但此時(shí)已經(jīng)結(jié)束算法了,需
要重新運(yùn)行程序再次輸入操作才能達(dá)到要求,這樣很繁瑣。同時(shí)還存在一些其他的問(wèn)題需要改進(jìn),程序就是在不斷改進(jìn)中不斷完善。
七、收獲及體會(huì)
這學(xué)期開(kāi)始兩周時(shí)間是我們自己選題上機(jī)的時(shí)間,雖然上機(jī)時(shí)間只有短短兩個(gè)星期但從中確實(shí)學(xué)到了不少知識(shí)。數(shù)據(jù)結(jié)構(gòu)可以說(shuō)是計(jì)算機(jī)里一門(mén)基礎(chǔ)課程,但我覺(jué)得我們一低定要把基礎(chǔ)學(xué)扎實(shí),然而這次短短的上機(jī)幫我又重新鞏固了C語(yǔ)言知識(shí),讓我的水平又一部的提高。數(shù)據(jù)結(jié)構(gòu)這是一門(mén)純屬于設(shè)計(jì)的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。它對(duì)我們來(lái)說(shuō)具有一定的難度。它是其它編程語(yǔ)言的一門(mén)基本學(xué)科。
我選的上機(jī)題目是交叉合并兩個(gè)鏈表,對(duì)這個(gè)題目,我覺(jué)得很基礎(chǔ)。剛開(kāi)始調(diào)試代碼的時(shí)候有時(shí)就是一個(gè)很小的錯(cuò)誤,導(dǎo)致整個(gè)程序不能運(yùn)行,然而開(kāi)始的我還沒(méi)從暑假的狀態(tài)轉(zhuǎn)到學(xué)習(xí)上,每當(dāng)程序錯(cuò)誤時(shí)我都非常焦躁,甚至想到了放棄,但我最終找到了狀態(tài),一步一步慢慢來(lái),經(jīng)過(guò)無(wú)數(shù)次的檢查程序錯(cuò)誤的原因后慢慢懂得了耐心是一個(gè)人成功的必然具備的條件!同時(shí),通過(guò)此次課程設(shè)計(jì)使我了解到,硬件語(yǔ)言必不可缺少,要想成為一個(gè)有能力的人,必須懂得硬件基礎(chǔ)語(yǔ)言。在這次課程設(shè)計(jì)中,雖然不會(huì)成功的編寫(xiě)一個(gè)完整的程序,但是在看程序的過(guò)程中,不斷的上網(wǎng)查資料以及翻閱相關(guān)書(shū)籍,通過(guò)不斷的模索,測(cè)試,發(fā)現(xiàn)問(wèn)題,解
決問(wèn)題和在老師的幫助下一步一步慢慢的正確運(yùn)行程序,終于完成了這次課程設(shè)計(jì),雖然這次課程設(shè)計(jì)結(jié)束了但是總覺(jué)得自已懂得的知識(shí)很是不足,學(xué)無(wú)止境,以后還會(huì)更加的努力深入的學(xué)習(xí)。
專(zhuān)業(yè)班級(jí):08軟件工程3班
學(xué)號(hào):080107031123
姓名:彭德偉
201*/9/25
友情提示:本文中關(guān)于《數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì) 報(bào)告新的體會(huì)》給出的范例僅供您參考拓展思維使用,數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì) 報(bào)告新的體會(huì):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。