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