在线观看av毛片亚洲_伊人久久大香线蕉成人综合网_一级片黄色视频播放_日韩免费86av网址_亚洲av理论在线电影网_一区二区国产免费高清在线观看视频_亚洲国产精品久久99人人更爽_精品少妇人妻久久免费

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)心得體會(huì)

前言:本站為你精心整理了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)心得體會(huì)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。

一、課程設(shè)計(jì)目的

數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)科學(xué)的基礎(chǔ)理論知識(shí),也是軟件設(shè)計(jì)的技術(shù)基礎(chǔ)。本課程設(shè)計(jì)的性質(zhì)是檢驗(yàn)理論科學(xué)系的效果以及綜合運(yùn)用的能力,目的是訓(xùn)練學(xué)生進(jìn)行復(fù)雜程序設(shè)計(jì)的技能和培養(yǎng)良好的程序設(shè)計(jì)習(xí)慣。本課程設(shè)計(jì)的任務(wù)是要求學(xué)生使用C或C++語(yǔ)言編程,解決具有一定規(guī)模的、具有實(shí)際意義的應(yīng)用題,實(shí)現(xiàn)理論課所要求的數(shù)據(jù)組織、存儲(chǔ)、處理的基本方法。

二、課程設(shè)計(jì)所用到的工具

這次課程設(shè)計(jì)所用到的工具M(jìn)icrosoftvisualc++6.0PC機(jī)一臺(tái)。

三、這次課程設(shè)計(jì)我所選擇的兩個(gè)題目

1、一元多項(xiàng)式計(jì)算。

2、文章編輯器。

設(shè)計(jì)分析

一)一元多項(xiàng)式計(jì)算

1、需求分析

要求按照指數(shù)將序排列建立并輸出多項(xiàng)式;能夠完成兩個(gè)多項(xiàng)式的相加、相減,并將結(jié)果輸入。

2、概要設(shè)計(jì)

在分析題目要求的基礎(chǔ)上,我首先設(shè)計(jì)了一個(gè)結(jié)構(gòu)體,定義如下:

structpoly

{floatcoef;

intexp;

polytypenext;};

在這個(gè)結(jié)構(gòu)體中,定義了一個(gè)浮點(diǎn)型的系數(shù)coef,還定義了一個(gè)整形的指針exp。接下來(lái)要做的就是定義各個(gè)不同用途的函數(shù),以滿足課程設(shè)計(jì)的需要,所用到的函數(shù)定義如下:

polytypeCreate_Empty_Node(int);創(chuàng)建一個(gè)空鏈表

voidInput_Values(polytype,int);輸入值

voidInsert_Node(polytype,float,int);插入接點(diǎn)

voidAdd_Poly(polytype,polytype);將兩個(gè)多項(xiàng)式相加

voidSub_Poly(polytype,polytype);將兩個(gè)多項(xiàng)式相減

voidOutPut_Results(polytype);將結(jié)果在顯示器上顯示

3、源代碼

#include"stdio.h"

#include"stdlib.h"

typedefintdatatype;/*定義多項(xiàng)式節(jié)點(diǎn)的結(jié)構(gòu)*/

typedefstructnode

{floatcoef;/*系數(shù)*/

intexpn;/*指數(shù)*/

structnode*next;/*指向結(jié)構(gòu)體的指針*/

}PotyNode;/*建立連表,返回指向多項(xiàng)式頭節(jié)點(diǎn)的指針*/

PotyNode*Creat_PotyNodeTail()

{PotyNode*L,*s,*r;/*聲明結(jié)構(gòu)體指針*/

floatc;/*系數(shù)*/

inte;/*指數(shù),建立頭節(jié)點(diǎn),頭節(jié)點(diǎn)指針設(shè)置為空*/

L=(PotyNode*)malloc(sizeof(PotyNode));

L->next=NULL;/*是指針r指向頭節(jié)點(diǎn)*/

r=L;

printf("\ninputcoefandexpn:");

scanf("%f%d",&c,&e);

while(c!=0)/*輸入的第一項(xiàng)系數(shù)不允許為0,防止無(wú)意義的輸入*/

{/*初始化節(jié)點(diǎn)*/

s=(PotyNode*)malloc(sizeof(PotyNode));s->coef=c;s->expn=e;s->next=NULL;

r->next=s;/*連接節(jié)點(diǎn)*/

r=s;/*指針r指向當(dāng)前節(jié)點(diǎn),用于連接下一節(jié)點(diǎn)*/

printf("\ncoefandexpn:");

scanf("%f%d",&c,&e);

}returnL;

}/*獲得多項(xiàng)式的長(zhǎng)度,參數(shù)為多項(xiàng)式頭節(jié)點(diǎn)指針*/

intGetlength(PotyNode*L)

{PotyNode*p;intcount=0;p=L->next;

while(p)

{count++;p=p->next;}

returncount;}/*獲得指向i節(jié)點(diǎn)的指針,在刪除節(jié)點(diǎn)的時(shí)候來(lái)獲得準(zhǔn)備刪除的前一節(jié)點(diǎn)*/

PotyNode*GetElem_PotyNode(PotyNode*L,inti)

{PotyNode*p;intj=0;p=L;

while(p->next&&j!=i)/*當(dāng)p不是尾節(jié)點(diǎn),并且不是第i個(gè)節(jié)點(diǎn)*/

{j++;p=p->next;}

if(i==j)

returnp;/*找到節(jié)點(diǎn)*/

else

returnNULL;/*沒有找到節(jié)點(diǎn)*/}/*刪除節(jié)點(diǎn)i*/

intDelete_PotyNode(PotyNode*L,inti)

{PotyNode*q,*p;/*獲得節(jié)點(diǎn)i的前一個(gè)節(jié)點(diǎn),便于刪除節(jié)點(diǎn)i*/

p=GetElem_PotyNode(L,i-1);q=p->next;

if(q)/*如果P為空,則說(shuō)明節(jié)點(diǎn)p也就是節(jié)點(diǎn)i-1就是尾節(jié)點(diǎn),節(jié)點(diǎn)i實(shí)際并不存在*/

{p->next=q->next;

free(q);return1;}

else

return0;}/*對(duì)輸入的多項(xiàng)式LA,LB進(jìn)行相加,結(jié)果為L(zhǎng)C,返回指向LC頭節(jié)點(diǎn)的指針*/

PotyNode*Add_PotyNode(PotyNode*LA,PotyNode*LB)

{PotyNode*LC,*q1,*q2,*r,*s,*p;

intx=1;q1=LA->next;q2=LB->next;LC=LA;

LC->next=NULL;/*指針r是當(dāng)前指針便于進(jìn)行各種操作*/

r=LC;

while(q1&&q2)/*當(dāng)多項(xiàng)式LA,和LB都沒有結(jié)束的時(shí)候*/

{if(q1->expn<q2->expn)

{s=q1;q1=q1->next;}

elseif(q1->expn>q2->expn)

{s=q2;q2=q2->next;}/*指數(shù)相同,相加*/

else{q1->coef+=q2->coef;

s=q1;q1=q1->next;q2=q2->next;}/*結(jié)果連接到多項(xiàng)式LC*/

s->next=NULL;r->next=s;r=s;}/*如果LB已結(jié)束,把LA剩余的部分連接到LC上*/

if(q1)r->next=q1;

if(q2)r->next=q2;/*去除多項(xiàng)式中系數(shù)為零的項(xiàng),我對(duì)代碼作了小的修改*/

p=LC->next;

while(p->next)

{if(p->coef==0)

{p=p->next;

Delete_PotyNode(LC,x);}

else

{p=p->next;x++;}}

returnLC;}/*打印多項(xiàng)式*/

voidprint_PotyNode(PotyNode*L)

{inti;PotyNode*p=L->next;

for(i=0;i<Getlength(L);i++)

{printf("%fX%d",p->coef,p->expn);

if(p->next==NULL)

return;

elseprintf("+");

p=p->next;}}

voidmain()

{PotyNode*LA,*LB,*LC;

intx;

printf("inputLA(endby0):\n");

LA=Creat_PotyNodeTail();

printf("f(LA)=");

print_PotyNode(LA);

printf("\ninputLB(endby0):\n");

LB=Creat_PotyNodeTail();

printf("\n");

printf("f(LB)=");

print_PotyNode(LB);

printf("\n");

LC=Add_PotyNode(LA,LB);

printf("Afteraddf(LA)andf(LB),f(LC)is:");

print_PotyNode(LC);

scanf("%d",&x);}

3、運(yùn)行結(jié)果

提示輸入一個(gè)多項(xiàng)式LA(以0結(jié)束)然后輸入每項(xiàng)的系數(shù)和指數(shù),輸入后再提示輸入另一個(gè)多項(xiàng)式LB(以0結(jié)束)然后輸入每項(xiàng)的系數(shù)和指數(shù)。按回車鍵后得出f<LC>=f<LA>+f<LB>。

二)文章編輯器

1、需求分析

1)輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。

2)輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出“全部字母數(shù)”、

“數(shù)字個(gè)數(shù)”、“空格個(gè)數(shù)”、“文章總字?jǐn)?shù)”(3)輸出刪除某一字符串后的文章

2、概要設(shè)計(jì)

a、建立文本,存儲(chǔ)結(jié)構(gòu)用鏈表

voidCreateTXT(LINE*&head){

printf("\n請(qǐng)輸入文本,每行最多輸入80字符!\n");

printf("輸入Ctrl+E(^E)則結(jié)束輸入\n");

LINE*p=newLINE;//首先為鏈表建立一個(gè)附加表頭結(jié)點(diǎn)

head=p;//將p付給表頭指針

chartmp[80];

b、計(jì)算空格數(shù)

intCount_Space(LINE*&head){//統(tǒng)計(jì)空格數(shù)

LINE*p=head;

intasc_space=32;//空格的ASCIC碼值

intcount=0;

do

{intLen=strlen(p->data);//計(jì)算當(dāng)前data里的數(shù)據(jù)元素的個(gè)數(shù)

for(inti=0;i<Len;i++)

if(p->data[i]==asc_space)count++;}//計(jì)算空格數(shù)

while((p=p->next)!=NULL);//遍歷鏈表

returncount;}

c、統(tǒng)計(jì)數(shù)字?jǐn)?shù)

intCount_Num(LINE*&head){//統(tǒng)計(jì)數(shù)字?jǐn)?shù)

LINE*p=head;

intcount=0;

do

{intLen=strlen(p->data);//計(jì)算當(dāng)前data里的數(shù)據(jù)元素的個(gè)數(shù)

for(inti=0;i<Len;i++)

if(p->data[i]>=48&&p->data[i]<=57)count++;}//計(jì)算空格數(shù)

while((p=p->next)!=NULL);//遍歷鏈表

returncount;}

d、統(tǒng)計(jì)文章的總字?jǐn)?shù)

intCount_All_Word(LINE*&head){//統(tǒng)計(jì)文章的總字?jǐn)?shù)

LINE*p=head;//保存鏈表的首地址

intcount=0;//總字母數(shù)

do

{count+=strlen(p->data);}//計(jì)算當(dāng)前行內(nèi)的字符數(shù)!除''''\0''''結(jié)束符外!注意,該統(tǒng)計(jì)包含“空格的長(zhǎng)度!”

while((p=p->next)!=NULL);//遍歷鏈表

returncount;}

3、源代碼

/*definemacrovariables*/

#definetrue1

#definefalse0

#include<stdlib.h>

#include<stdio.h>

#include<malloc.h>

#include<string.h>

#include<conio.h>

#defineSTACK_INIT_SIZE100/*variablesinthesavestoragespace*/

#defineSTACKINCREMENT10/*incrementofdistributioninthesavestoragespace*/

typedefstruct

{char*base;/*beforeandafterthecreatingoftheshed,baseisNULL*/

char*top;/*shedpointer*/

intstacksize;/*thesavestoragespacedistributivebytheelement*/

}SqStack;

SqStackS,q;

/*constructastructuerarray*/

typedefstruct{

charcc[9999];

intno;}Array;

/*definethewholebureauvarible*/

Arraya[10000];

intm,n,i,j;

charname[40];

chart=''''\n'''';

FILE*fp;

/*constructanemputyshed*/

voidInitStack()

{S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));

if(S.base==NULL)

exit(1);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;}

/*usingcharactershed,acceptthedatafromtheterminal*/

voidpush(chare)

{if(S.top-S.base>=S.stacksize)

{/*applyanewroom*/

S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));

if(!S.base)

exit(1);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;}

/*acceptthenextcharacter*/

*S.top++=e;}

/*carrythewholedatainthestackintothedatasection*/

charpop()

{chare;

if(S.top==S.base)

returnfalse;

e=*(--S.top);

returne;}

/*emptythedatainthestack*/

voidClearStack()

{S.top=S.base;/*letS.topandS.basepointtothesameplace*/}

/*destroythestack*/

voidDestroyStack()

{free(S.base);/*freethedatainthestack*/

S.top=S.base;}

/*judgetheemputyoftheshed*/

intStackEmpty()

{if(S.top==S.base)

returntrue;

returnfalse;}

/*takeoutthedatafromthestackandtheputinthestucterarray*/

voidBuffer(){

n=0;m=1;

/*movethedataintheshadeuntillthestackisempty*/

while(S.top!=S.base)

{n=n+1;

a[m].no=a[m].no+1;

a[m].cc[n]=*(S.top-1);

S.top--;}}

/*savethedata*/

voidsave()

{printf("\n\nfilename:");

scanf("%s",&name);

fp=fopen(name,"wb");

for(i=1;i<=m;i++)

{for(j=a[i].no;j>=1;j--)

{fwrite(&(a[i].cc[j]),1,1,fp);}

fwrite(&t,1,1,fp);}

fclose(fp);}

/*mainfunction*/

voidmain()

{charch,e;

printf("\n\n\n\t\t\twelcometousethewholescreeneditor");

printf("\n\npressF6ifyouwanttosavethefile,youcansavethefilewhenyousee\"^Z\"\n");

printf("\n******************************************************************************\n\n");/*SqStackS_stack,D_stack;*/

InitStack();/*InitStack(D_stack);*/

ch=getchar();

while(ch!=EOF)

{while(ch!=EOF&&ch!=''''\n'''')

{switch(ch)

{case''''#'''':e=pop();break;

case''''@'''':ClearStack();break;

default:push(ch);break;}

ch=getchar();}

Buffer();

ClearStack();

if(ch!=EOF)

ch=getchar();}

save();

DestroyStack();}

4、運(yùn)行結(jié)果

三、這次課程設(shè)計(jì)的心得體會(huì)

通過(guò)實(shí)習(xí)我的收獲如下

1、鞏固和加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能力。

2、培養(yǎng)了我選用參考書,查閱手冊(cè)及文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考,深入研究,分析問(wèn)題、解決問(wèn)題的能力。

3、通過(guò)實(shí)際編譯系統(tǒng)的分析設(shè)計(jì)、編程調(diào)試,掌握應(yīng)用軟件的分析方法和工程設(shè)計(jì)方法。

4、通過(guò)課程設(shè)計(jì),培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐步建立正確的生產(chǎn)觀念、經(jīng)濟(jì)觀念和全局觀念。

根據(jù)我在實(shí)習(xí)中遇到得問(wèn)題,我將在以后的學(xué)習(xí)過(guò)程中注意以下幾點(diǎn):

1、認(rèn)真上好專業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。

2、寫程序的過(guò)程中要考慮周到,嚴(yán)密。

3、在做設(shè)計(jì)的時(shí)候要有信心,有耐心,切勿浮躁。

4、認(rèn)真的學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基礎(chǔ)上學(xué)會(huì)靈活運(yùn)用。

5、在課余時(shí)間里多寫程序,熟練掌握在調(diào)試程序的過(guò)程中所遇到的常見錯(cuò)誤,以便能節(jié)省調(diào)試程序的時(shí)間。

如东县| 工布江达县| 崇州市| 德惠市| 政和县| 平利县| 锡林郭勒盟| 陆川县| 浙江省| 麻城市| 邢台县| 温州市| 崇阳县| 湟源县| 凯里市| 弥渡县| 盐亭县| 潜江市| 宝清县| 长岭县| 章丘市| 青川县| 巴东县| 晋城| 尼勒克县| 米泉市| 花莲县| 昭通市| 鲜城| 易门县| 尉氏县| 涿州市| 施秉县| 丹阳市| 林甸县| 哈巴河县| 兰州市| 顺平县| 涟水县| 泰兴市| 体育|