版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 信息 學(xué) 院 計(jì)算機(jī) ?! I(yè) 2010-02-17 班 </p><p> 一、課程設(shè)計(jì)(論文)題目 數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng) </p><p> 二、課程設(shè)計(jì)(論文)工作自 2011 年12月19 日起至 2011 年
2、 12月 30 日止。</p><p> 三、課程設(shè)計(jì)(論文) 地點(diǎn): 5-401、402 </p><p> 四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p> 1.本課程設(shè)計(jì)的目的</p><p> 1、 使學(xué)生進(jìn)一步理解和掌握課
3、堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)</p><p> 構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及它們?cè)诔绦蛑械氖褂梅椒ā?lt;/p><p> 2、使學(xué)生掌握軟件設(shè)計(jì)的基本內(nèi)容和設(shè)計(jì)方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化</p><p><b> 軟件設(shè)計(jì)的能力。</b></p><p> 3、使學(xué)生掌握使用各種計(jì)算機(jī)資料和有關(guān)參考資料
4、,提高學(xué)生進(jìn)行程序</p><p> 設(shè)計(jì)的基本能力。 </p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)基本要求:</b></p><p> 1. 分析題目,查閱相關(guān)資料;</p><p> 2. 算法設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì); </p&
5、gt;<p> 3. 編寫代碼并調(diào)試;</p><p> 4. 完成課程設(shè)計(jì)報(bào)告。 </p><p><b> 2)創(chuàng)新要求: </b></p><p> 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì)。</p><p> 3)課程設(shè)計(jì)論文編寫要求</p><p>
6、 (1)要按照書稿的規(guī)格打印謄寫畢業(yè)論文</p><p> ?。?)論文包括目錄、緒論、正文、小結(jié)、參考文獻(xiàn)、謝辭、附錄等</p><p> ?。?)畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成</p><p> 4)答辯與評(píng)分標(biāo)準(zhǔn): </p><p> (1)完成問題的解決方法分析:20分; </p><p> (2)算法
7、思想(流程):20分; </p><p> (3)數(shù)據(jù)結(jié)構(gòu):20分;</p><p> (4)測(cè)試數(shù)據(jù):20分</p><p> ?。?)回答問題:20分。</p><p> 5)參考文獻(xiàn): </p><p> 《C程序設(shè)計(jì)》(第二版) 譚浩強(qiáng) 著 清華大學(xué)出版社出版</p>
8、;<p> 《C++程序設(shè)計(jì)》 譚浩強(qiáng) 著 清華大學(xué)出版社出版</p><p> 《數(shù)據(jù)結(jié)構(gòu)》(C語言版) 嚴(yán)蔚敏、吳偉民 著 清華大學(xué)出版社出版</p><p> 《數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)與提高》 徐孝凱 著 清華大學(xué)出版社出版 </p><p> 6)課程設(shè)計(jì)進(jìn)度安
9、排</p><p> 內(nèi)容 天數(shù) 地點(diǎn)</p><p> 構(gòu)思及收集資料 4天 圖書館</p><p> 編程與調(diào)試 5天 實(shí)驗(yàn)室</p><p> 撰寫論文 2天
10、 宿舍</p><p> 學(xué)生簽名: </p><p> 2011年 12月 19 日</p><p> 課程設(shè)計(jì)(論文)評(píng)審意見</p><p> ?。?)完成問題分析(20分):優(yōu)(?。⒘迹ā。⒅校ā。⒁话悖ā。?、差(?。?; </p><p> ?。?)算法思想
11、?。?0分):優(yōu)( )、良( )、中( )、一般( )、差(?。?</p><p> ?。?)數(shù)據(jù)結(jié)構(gòu) (20分):優(yōu)(?。⒘迹ā。?、中( )、一般( )、差( );</p><p> ?。?)測(cè)試數(shù)據(jù) (20分):優(yōu)(?。?、良(?。?、中(?。⒁话悖ā。?、差(?。?;</p><p> ?。?)回答問題 ?。?0分):優(yōu)(?。?、良(?。?、中(?。?、一般(
12、?。?、差(?。?;</p><p> ?。?)格式規(guī)范性及考勤是否降等級(jí):是(√)、否(?。?lt;/p><p> 評(píng)閱人: 職稱: </p><p> 2011年1月 3 日</p><p><b> 目 錄</b></p><p> 第一章 課
13、程設(shè)計(jì)的目的………………………… 4</p><p> 1.1 課程設(shè)計(jì)的題目及簡(jiǎn)介……………………… 4</p><p> 第二章 課程設(shè)計(jì)的內(nèi)容………………………… 4</p><p> 2.1 課程設(shè)計(jì)的設(shè)計(jì)說明……………………… 4</p><p> 2.2 程序截圖…………………………………….
14、 5</p><p> 2.3 部分程序清單………………………………… 6</p><p> 第三章 測(cè)試數(shù)據(jù)…………………………………… 28</p><p> 3.1 串的基本操作 …………………………… 28</p><p> 3.2 隊(duì)列和二叉樹的基本操作………………… 29</p>
15、<p> 3.3 排序和順序表……………………………… 30</p><p> 第四章 課設(shè)心得………………………………… 31</p><p> 第五章 參考文獻(xiàn)…………………………………… 31 </p><p><b> 一、課程設(shè)計(jì)的目的</b></p><p> 1,課程
16、設(shè)計(jì)的題目及簡(jiǎn)介:</p><p> 課程設(shè)計(jì)是一門鍛煉學(xué)生動(dòng)手操作能力的課程,在了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法的過程中,培養(yǎng)初步的獨(dú)立分析和設(shè)計(jì)能力;初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力;訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。為自己以后從事軟件開發(fā)事業(yè)打下基
17、礎(chǔ)。</p><p> 課設(shè)使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及他們?cè)诔绦蛑械氖褂梅椒āU莆帐褂酶鞣N計(jì)算機(jī)資料和有關(guān)的參考資料,提高程序設(shè)計(jì)的基本能力。同時(shí),為了掌握,鞏固本學(xué)習(xí)所學(xué)的數(shù)據(jù)結(jié)構(gòu)的一些算法和獲取實(shí)現(xiàn)大型的程序設(shè)計(jì)架構(gòu)思想,也為了將整個(gè)數(shù)據(jù)結(jié)構(gòu)課程各個(gè)知識(shí)點(diǎn)有條不紊的聯(lián)系起來,因此我選擇了”數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)”.</p>
18、<p> 還可以使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作實(shí)現(xiàn)算法,以及它們?cè)诔绦蛑械氖褂梅椒?使學(xué)生掌握軟件設(shè)計(jì)的基本內(nèi)容和設(shè)計(jì)方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化軟件設(shè)計(jì)的能力。</p><p><b> 二、課程設(shè)計(jì)的內(nèi)容</b></p><p><b> 1、設(shè)計(jì)說明</b></p>
19、<p> 本次課程設(shè)計(jì)的主要是每章的ADT算法演示系統(tǒng),從中穿插的程序功能是所定義的數(shù)據(jù)結(jié)構(gòu)類型基本應(yīng)用(比如說二叉樹的左右子樹,字符串的鏈接,排序中的各種算法,圖的BFS,DFS)</p><p> 另外,演示系統(tǒng)設(shè)計(jì)的理念是要更好的引導(dǎo)學(xué)生知道操作的基本,及合理編排程序。</p><p><b> 2、程序截圖</b></p>&l
20、t;p> 圖1 查找表的基本操作</p><p> 圖2 圖的基本操作</p><p><b> 3、程序清單</b></p><p> ?。?)線性表的主要操作</p><p> //構(gòu)造一個(gè)空的線性表</p><p> Status InitList(SqList
21、 &L)</p><p><b> {</b></p><p> L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));</p><p> if(!L.elem)</p><p> return ERROR;//存儲(chǔ)空間失敗</
22、p><p> L.length = 0;//當(dāng)前長度0</p><p> L.size = LIST_INIT_SIZE;//初始容量</p><p> return OK;</p><p><b> }</b></p><p><b> //銷毀順序表L</b><
23、;/p><p> Status DestroyList(SqList &L)</p><p><b> {</b></p><p> free(L.elem);</p><p> L.elem = NULL;</p><p> L.length = L.size = 0;</p
24、><p> return OK;</p><p><b> }</b></p><p><b> //將L重置為空表</b></p><p> Status ClearList(SqList &L)</p><p><b> {</b>&l
25、t;/p><p> L.length = 0;</p><p> return OK;</p><p> }//若L為空白,返回TRUE;否則返回FALSE</p><p> Status ListEmpty(SqList L)</p><p><b> {</b></p>&
26、lt;p> if(0 == L.length)</p><p> return TRUE;</p><p><b> else</b></p><p> return FALSE;</p><p> }//返回L中的元素個(gè)數(shù)</p><p> Status ListLength(
27、SqList L)</p><p><b> {</b></p><p> return L.length;</p><p><b> }</b></p><p> //返回L中第1個(gè)與e滿足關(guān)系compare()的數(shù)據(jù)元素的位序</p><p> Status L
28、ocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))</p><p><b> {</b></p><p> ElemType *p;</p><p> int i = 1;//i的初值為第i個(gè)元素的位序</p><p> p = L
29、.elem;//P的初值為第i個(gè)元素的存儲(chǔ)位置</p><p> while(i <= L.length && !compare(*p++,e))</p><p><b> ++i;</b></p><p> if(i <= L.length)</p><p><b> re
30、turn i;</b></p><p><b> else</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> (2)棧的基本操作</b></p>
31、<p> int InitStack(SqStack &S)</p><p><b> {</b></p><p><b> S.base = </b></p><p> (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));</p&
32、gt;<p> if(!S.base) return 0;</p><p> S.top = S.base;</p><p> S.stacksize = STACK_INIT_SIZE;</p><p><b> return 1;</b></p><p><b> }</b&
33、gt;</p><p> void DestroyStack(SqStack &S) </p><p><b> { </b></p><p> free(S.base); </p><p><b> } </b></p><p> void ClearSt
34、ack(SqStack &S) </p><p><b> { </b></p><p> S.top=S.base; </p><p><b> } </b></p><p> int StackEmpty(SqStack S) </p><p><b
35、> { </b></p><p> if(S.top==S.base) return 1; </p><p><b> else </b></p><p> return 0; </p><p><b> } </b></p><p> int
36、StackLength(SqStack S) </p><p><b> { </b></p><p> int i; char *p; i=0; </p><p><b> p=S.top; </b></p><p> while(p!=S.base) </p><p&
37、gt;<b> {p--; </b></p><p><b> i++; </b></p><p><b> } </b></p><p> return i; </p><p><b> }</b></p><p>
38、int GetTop(SqStack S,SElemType &e)</p><p><b> {</b></p><p> if(S.top == S.base) return 0;</p><p> e = *(S.top-1);</p><p><b> return 1;<
39、/b></p><p><b> }</b></p><p> int Push(SqStack &S,SElemType e)</p><p><b> {</b></p><p> if(S.top-S.base>= S.stacksize){</p>
40、;<p> S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));</p><p> if(!S.base) return 0;</p><p> S.top = S.base+S.stacksize;</p><p> S.s
41、tacksize+=STACKINCREMENT;</p><p><b> }</b></p><p> *S.top++ = e;</p><p><b> return 1;</b></p><p><b> }</b></p><p>
42、 int Pop(SqStack &S,SElemType &e)</p><p><b> {</b></p><p> if(S.top == S.base) return 0;</p><p> e = *--S.top;</p><p><b> return 1;<
43、;/b></p><p><b> }</b></p><p> ?。?)隊(duì)列的基本操作</p><p> bool InQueue(Queuesq &qu, int size)</p><p><b> {</b></p><p> if(size&
44、lt;0)</p><p><b> {</b></p><p> cout<<"size的值非法!"<<endl;</p><p> return false;</p><p><b> }</b></p><p> q
45、u.mSize=size+1;</p><p> qu.queue=new ElemType[qu.mSize];</p><p> if(!qu.queue)</p><p><b> {</b></p><p> cout<<"內(nèi)存空間用完了!"<<endl;<
46、;/p><p> return false;</p><p><b> }</b></p><p> qu.length=0;</p><p> qu.front=qu.rear=0;</p><p><b> }</b></p><p> v
47、oid clear(Queuesq &qu)</p><p><b> {</b></p><p> delete []qu.queue;</p><p> qu.queue=0;</p><p> qu.front=qu.rear=0;</p><p> qu.length=
48、0;</p><p> qu.mSize=0;</p><p><b> }</b></p><p> bool enQueue(Queuesq &qu,ElemType item)</p><p><b> {</b></p><p> if(((qu.
49、rear+1)%qu.mSize)==qu.front)</p><p><b> {</b></p><p> cout<<"隊(duì)列已滿,溢出"<<endl;</p><p> return false;</p><p><b> }</b><
50、;/p><p> qu.rear=(qu.rear+1)%qu.mSize;</p><p> qu.queue[qu.rear]=item;</p><p> return true;</p><p><b> }</b></p><p> ElemType outQueue(Queues
51、q &qu)</p><p> { if(qu.front==qu.rear)</p><p><b> {</b></p><p> cout<<"隊(duì)列為空"<<endl;</p><p> return false;</p><p&g
52、t;<b> }</b></p><p> qu.front=(qu.front+1)%qu.mSize;</p><p> qu.length--;</p><p> return qu.queue[qu.front];</p><p><b> }</b></p><
53、;p> ElemType peekQueue(Queuesq &qu)</p><p><b> {</b></p><p> if(qu.front==qu.rear)</p><p><b> {</b></p><p> cout<<"隊(duì)列為空&q
54、uot;<<endl;</p><p> return false;</p><p><b> }</b></p><p> return qu.queue[(qu.front+1)%qu.mSize];</p><p><b> }</b></p><p&g
55、t; int QueueLength(Queuesq qu)</p><p><b> {</b></p><p> return(qu.rear+qu.mSize-qu.front)%qu.mSize; }</p><p> bool Queuetraverse(Queuesq qu)</p><p>&l
56、t;b> {</b></p><p><b> int k=0;</b></p><p> for(k=qu.front+1;k<=qu.rear;k++)</p><p> cout<<qu.queue[k];</p><p> cout<<endl;</
57、p><p> if((qu.rear-qu.front)!=k)</p><p> return false;</p><p><b> else </b></p><p> return true;</p><p><b> }</b></p><
58、p> void DestroyQueue(Queuesq &qu)</p><p><b> {</b></p><p> free(qu.queue);</p><p><b> }</b></p><p> (4) 串的基本操作</p><p>
59、 void Assign(SqString &s,char t[])</p><p><b> {</b></p><p><b> int i=0;</b></p><p> while (t[i]!='\0')</p><p><b> {</b&
60、gt;</p><p> s.ch[i]=t[i]; i++;</p><p><b> }</b></p><p><b> s.len=i;</b></p><p><b> }</b></p><p> void StrCo
61、py(SqString &s,SqString t)</p><p><b> {</b></p><p><b> int i;</b></p><p> for (i=0;i<t.len;i++)</p><p> s.ch[i]=t.ch[i];</p>
62、<p> s.len=t.len;</p><p><b> }</b></p><p> int StrLength(SqString s)</p><p><b> {</b></p><p> return(s.len);</p><p><
63、b> } </b></p><p> int StrEqual(SqString s,SqString t)</p><p><b> {</b></p><p><b> int i=0;</b></p><p> if (s.len!=t.len)</p&g
64、t;<p> return(0);</p><p><b> else</b></p><p><b> {</b></p><p> for (i=0;i<s.len;i++)</p><p> if (s.ch[i]!=t.ch[i]) </p>&l
65、t;p> return(0);</p><p> return(1);</p><p><b> }</b></p><p><b> }</b></p><p> SqString Concat(SqString s,SqString t)</p><p>
66、<b> {</b></p><p> SqString r;</p><p><b> int i,j;</b></p><p> for (i=0;i<s.len;i++)</p><p> r.ch[i]=s.ch[i];</p><p> for
67、 (j=0;j<t.len;j++)</p><p> r.ch[s.len+j]=t.ch[j];</p><p> r.len=i+j;</p><p> return(r);</p><p><b> } </b></p><p> void DispStr(Sq
68、String s)</p><p><b> {</b></p><p><b> int i;</b></p><p> for (i=0;i<s.len;i++)</p><p> printf("%c",s.ch[i]);</p><p&g
69、t; printf("\n");</p><p><b> }</b></p><p> int strcompare(SqString s,SqString t)</p><p><b> {</b></p><p><b> int i;</b>
70、;</p><p> for(i=0;i<StrLength(s)&&i<StrLength(t);i++)</p><p> if(s.ch[i]!=t.ch[i])</p><p> return s.ch[i]-t.ch[i];</p><p> return StrLength(s)-StrLeng
71、th(t);</p><p><b> }</b></p><p><b> (5)靜態(tài)查找表</b></p><p> int Create ( LineList &L,int n)</p><p><b> {int j;</b></p>&
72、lt;p> L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));</p><p> if(!L.elem)</p><p><b> return 0;</b></p><p> L.length = 0;</p><p> L.s
73、ize = LIST_INIT_SIZE;</p><p> cout<<"逐個(gè)輸入元素:"<<endl;</p><p> for(j=1;j<=n;j++)</p><p> cin>>L.elem[j];</p><p><b> return 1;<
74、/b></p><p><b> }</b></p><p> int DestroyList(LineList &L)</p><p><b> {</b></p><p> free(L.elem);</p><p> L.elem = NULL;
75、</p><p> L.length = L.size = 0;</p><p><b> return 1;</b></p><p><b> }</b></p><p> int SeqSearch(LineList L,int n,KeyType k)</p><p
76、> {int i=1;</p><p> while (i<=n && L.elem[i]!=k) i++;</p><p><b> if (i>n) </b></p><p> return(-1);</p><p><b> else</b><
77、;/p><p> return(i);</p><p><b> }</b></p><p> int ListTraverse(LineList L,int n)</p><p><b> {</b></p><p> ElemType *p;</p>
78、<p><b> int i;</b></p><p><b> p=L.elem;</b></p><p> for(i=1;i<=n;i++)</p><p> cout<<p[i]<<' ';</p><p> cout<
79、<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> (6) 二叉樹的基本操作</p><p> Status CreateBiTree(BiTree &T)</p><p><
80、b> {char ch;</b></p><p> scanf("%c",&ch);</p><p> if(ch=='*') T=NULL; </p><p><b> else</b></p><p><b> {</b>
81、</p><p> if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))</p><p> exit(overflow);</p><p> T->data=ch;</p><p> CreateBiTree(T->lchild);</p><p> Create
82、BiTree(T->rchild);</p><p><b> }</b></p><p> return ok;</p><p><b> }</b></p><p> Status PreOrder(BiTree T)</p><p><b>
83、{if(T){</b></p><p> printf("%c",T->data);</p><p> PreOrder(T->lchild);</p><p> PreOrder(T->rchild);</p><p><b> } </b></p>
84、<p> return ok;</p><p><b> }</b></p><p> Status InOrder(BiTree T)</p><p><b> {</b></p><p><b> if(T)</b></p><p
85、><b> {</b></p><p> InOrder(T->lchild);</p><p> printf("%c",T->data);</p><p> InOrder(T->rchild);</p><p><b> }</b><
86、/p><p> return ok;</p><p><b> }</b></p><p> Status PostOrder(BiTree T)</p><p><b> {</b></p><p><b> if(T)</b></p&g
87、t;<p><b> {</b></p><p> PostOrder(T->lchild);</p><p> PostOrder(T->rchild);</p><p> printf("%c",T->data);</p><p><b> }&
88、lt;/b></p><p> return ok;</p><p><b> }</b></p><p><b> }</b></p><p> void LevelorderTraverse(BiTNode* T)</p><p><b> {&
89、lt;/b></p><p> const Maxsize=300;</p><p> BiTNode* Q[Maxsize];</p><p> int front=0,rear=0;</p><p> BiTNode* p;</p><p> if(T!=NULL)</p><p
90、><b> {</b></p><p> rear=(rear+1)%Maxsize;</p><p> Q[rear]=T;</p><p><b> }</b></p><p> while(front!=rear)</p><p><b>
91、{</b></p><p> front=(front+1)%Maxsize;</p><p> p=Q[front];</p><p> printf(“%c”, p->data);</p><p> if(p->lchild!=NULL)</p><p><b> {&l
92、t;/b></p><p> rear=(rear+1)%Maxsize;</p><p> Q[rear]=p->lchild;</p><p><b> }</b></p><p> if(p->rchild!=NULL)</p><p><b> {&l
93、t;/b></p><p> rear=(rear+1)%Maxsize;</p><p> Q[rear]=p->rchild;</p><p><b> }</b></p><p> if(front==(rear+1)%Maxsize)</p><p> cout<
94、;<endl<<endl;</p><p><b> }</b></p><p><b> }</b></p><p> void preorder(BiTree bt)</p><p><b> {</b></p><p>
95、;<b> if(bt)</b></p><p><b> { n++;</b></p><p> if(bt->lchild==NULL&&bt->rchild==NULL)</p><p> no++; preorder(bt->lchild);</p>&
96、lt;p> preorder(bt->rchild);</p><p><b> }</b></p><p><b> }</b></p><p> int Depth(BiTree bt) </p><p> { int depthval,depthLeft,depthR
97、ight;</p><p> if (!bt) depthval=0;</p><p><b> else {</b></p><p> depthLeft=Depth(bt->lchild);</p><p> depthRight=Depth(bt->rchild);</p>
98、<p> depthval=1+(depthLeft>depthRight ?depthLeft:depthRight);</p><p><b> } </b></p><p> return depthval;</p><p><b> }</b></p><p>
99、 int BiTreeEmpty(BiTree T)</p><p><b> {</b></p><p><b> if(T)</b></p><p><b> return 0;</b></p><p><b> else</b></p&
100、gt;<p><b> return 1;</b></p><p><b> }</b></p><p> char Root(BiTree T)</p><p><b> {</b></p><p> if(BiTreeEmpty(T))</p&
101、gt;<p><b> return 0;</b></p><p><b> else</b></p><p> return T->data;</p><p><b> }</b></p><p> char Value(BiTree p)<
102、;/p><p><b> {</b></p><p> return p->data;</p><p><b> }</b></p><p> BiTree Parent(BiTree T,BiTNode* e)</p><p><b> {if(T){
103、</b></p><p> if(T->data==e->data)</p><p> return NULL;</p><p><b> }</b></p><p> if(T->lchild!=NULL&&T->lchild->data==e->
104、data||T->rchild!=NULL&&T->rchild->data==e->data)</p><p><b> return T;</b></p><p><b> else{</b></p><p> BiTNode* tempP=NULL;</p>
105、<p> if(tempP=Parent(T->lchild,e))</p><p> return tempP;</p><p> if(tempP=Parent(T->rchild,e))</p><p> return tempP;</p><p> }return NULL;</p>&
106、lt;p><b> }</b></p><p> BiTree LeftChild(BiTree T,BiTNode* e){</p><p> if(!T) return ERROR;</p><p> if(e->lchild!=NULL) return e->lchild;</p><p>
107、; else return NULL;</p><p><b> }</b></p><p><b> (7)圖的基本操作</b></p><p> int CreateGraph(ALGraph *G)</p><p><b> {</b></p>&
108、lt;p> int i,j,k;</p><p><b> int w;</b></p><p> VertexType va,vb;</p><p> ArcNode *p;</p><p> scanf("%d",&(*G).kind);</p><p
109、> scanf("%d%d", &(*G).vexnum, &(*G).arcnum);</p><p> for(i = 0; i < (*G).vexnum; ++i)</p><p><b> {</b></p><p> scanf("%s", (*G).ve
110、rtices[i].data);</p><p> (*G).vertices[i].firstarc = NULL;</p><p><b> }</b></p><p> for(k = 0;k < (*G).arcnum; ++k)</p><p><b> {</b><
111、/p><p> if((*G).kind==1||(*G).kind==3)</p><p> scanf("%d%s%s",&w,va,vb);</p><p><b> else</b></p><p> scanf("%s%s",va,vb);</p&
112、gt;<p> i = LocateVex(*G,va); </p><p> j = LocateVex(*G,vb); </p><p> p = (ArcNode*)malloc(sizeof(ArcNode));</p><p> p->adjvex = j;</p><p> if((*G).kind
113、 == 1 || (*G).kind == 3)</p><p><b> {</b></p><p> p->info = (int *)malloc(sizeof(int));</p><p> *(p->info) = w;</p><p><b> }</b></p
114、><p><b> else</b></p><p> p->info = NULL; </p><p> p->nextarc = (*G).vertices[i].firstarc; </p><p> (*G).vertices[i].firstarc = p;</p><p&g
115、t; if((*G).kind >= 2) </p><p><b> {</b></p><p> p = (ArcNode*)malloc(sizeof(ArcNode));</p><p> p->adjvex = i;</p><p> if((*G).kind == 3) </p&
116、gt;<p><b> {</b></p><p> p->info = (int*)malloc(sizeof(int));</p><p> *(p->info) = w;</p><p><b> }</b></p><p><b> else&l
117、t;/b></p><p> p->info = NULL; </p><p> p->nextarc = (*G).vertices[j].firstarc; </p><p> (*G).vertices[j].firstarc = p;</p><p><b> }</b></p&g
118、t;<p><b> }</b></p><p><b> return 1;</b></p><p><b> }</b></p><p> void DFS(ALGraph G,int v){</p><p><b> int w;<
119、/b></p><p> VertexType v1,w1;</p><p> strcpy(v1,*GetVex(G,v));</p><p> visited[v] = 1;</p><p> VisitFunc(G.vertices[v].data);</p><p> for(w = Firs
120、tAdjVex(G,v1); w >= 0;</p><p> w = NextAdjVex(G,v1,strcpy(w1,*GetVex(G,w))))</p><p> if(!visited[w])</p><p> DFS(G,w);}</p><p> void DFSTraverse(ALGraph G,void(
121、*Visit)(char*))</p><p><b> {</b></p><p><b> int v;</b></p><p> VisitFunc = Visit; </p><p> for(v = 0; v < G.vexnum; v++)</p><
122、p> visited[v] = 0;</p><p> for(v = 0; v < G.vexnum; v++)</p><p> if(!visited[v])</p><p> DFS(G,v);</p><p> printf("\n");</p><p><
123、;b> }</b></p><p> void BFSTraverse(ALGraph G,void(*Visit)(char*))</p><p><b> {</b></p><p> int v,u,w;</p><p> VertexType u1,w1;</p><
124、;p> LinkQueue Q;</p><p> for(v = 0; v < G.vexnum; ++v)</p><p> visited[v]=0;</p><p> InitQueue(&Q);</p><p> for(v = 0; v < G.vexnum; v++)</p>
125、;<p> if(!visited[v])</p><p><b> {</b></p><p> visited[v]=1;</p><p> Visit(G.vertices[v].data);</p><p> EnQueue(&Q,v);</p><
126、;p> while(!QueueEmpty(Q))</p><p><b> {</b></p><p> DeQueue(&Q,&u);</p><p> strcpy(u1,*GetVex(G,u));</p><p> for(w = FirstAdjVex(G,u1); w
127、>= 0; w = NextAdjVex(G, u1, strcpy(w1, *GetVex(G,w))))</p><p> if(!visited[w])</p><p><b> {</b></p><p> visited[w] = 1;</p><p> Visit(G.vertices[w].
128、data);</p><p> EnQueue(&Q,w);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\n"
129、;);</p><p><b> }</b></p><p><b> (8)排序</b></p><p><b> /*快速排序*/</b></p><p> void QuickSort(LineList R[],int s,int t) </p>&
130、lt;p><b> {</b></p><p> int i=s,j=t;</p><p> LineList tmp;</p><p> if (s<t) </p><p> {tmp=R[s]; </p><p> while (i!=j) <
131、;/p><p> {while (j>i && R[j].key>tmp.key) </p><p><b> j--; </b></p><p> R[i]=R[j];</p><p> while (i<j && R[i].key<tmp.key)
132、 </p><p><b> i++;</b></p><p> R[j]=R[i];</p><p><b> }</b></p><p><b> R[i]=tmp;</b></p><p> QuickSort(R,s,i-1);&l
133、t;/p><p> QuickSort(R,i+1,t);</p><p><b> }</b></p><p><b> }</b></p><p><b> 三、測(cè)試數(shù)據(jù):</b></p><p> 圖3 串的基本操作</p&g
134、t;<p> 圖4 隊(duì)列的基本操作</p><p> 圖5 二叉樹的基本操作</p><p><b> 圖6 排序</b></p><p> 圖7 順序表的基本操作</p><p> 圖8 棧的基本操作</p><p> 四、課程設(shè)計(jì)總結(jié)(
135、寫出心得和總結(jié))</p><p> 經(jīng)過本次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我可以說是獲益匪淺。學(xué)習(xí)程序設(shè)計(jì)是一個(gè)非常需要實(shí)踐的過程,這一次的課程設(shè)計(jì)正是給了我機(jī)會(huì)。通過設(shè)計(jì)的題目,我不但鞏固了平時(shí)所學(xué),更學(xué)到了平時(shí)沒有注意到的一些技巧。這一次課程設(shè)計(jì)中我選的是所有抽象數(shù)據(jù)類型的ADT,很有挑戰(zhàn)性,也更加讓我重視基礎(chǔ),重視動(dòng)手能力。學(xué)海無涯,我要更加的努力。</p><p> 為了讓自己的設(shè)計(jì)更加
136、完善更符合課設(shè)標(biāo)準(zhǔn),一次次的更改自己的設(shè)計(jì)方案。在做課設(shè)之前一定要想好算法思想,構(gòu)思好各個(gè)功能模塊的布局等然后開始編寫,因?yàn)檫@些程序都是由微小的代碼組成的,所以經(jīng)常會(huì)出現(xiàn)一些錯(cuò)誤,令我最糾結(jié)的是參數(shù)傳遞部分,編譯的過程中經(jīng)常會(huì)出現(xiàn)諸如“cannot convert parameter 1 from 'SqStack' to 'SqStack *'”這種錯(cuò)誤,一開始不明白是什么意思,后來才知道功能調(diào)用的模塊
137、函數(shù)類型要聲明的部分一致,而且傳遞的數(shù)據(jù)個(gè)數(shù)也要一致。</p><p> 還有更令我糾結(jié)的一個(gè)問題是出現(xiàn)在二叉樹中,隊(duì)列調(diào)用不了,輸出總是到最后去,改后就沒錯(cuò)了,原來是c++和c的混編問題,先編譯c,之后,感覺如釋重負(fù)。</p><p> 在這次的課設(shè)中我學(xué)到的還是很多的,鞏固了自己在課堂上所學(xué)習(xí)得東西,同時(shí)學(xué)會(huì)了解決很多自己以前沒碰到的問題,提高了自己實(shí)踐能力。不管怎樣,作為一名工科
138、學(xué)生做此類的課程設(shè)計(jì)還是相當(dāng)具有意義的。也非常感謝學(xué)校給我們提供了這么一個(gè)實(shí)踐平臺(tái)。</p><p><b> 五、參考文獻(xiàn) </b></p><p> 【1】、數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴(yán)蔚敏 吳偉名著 清華大學(xué)出版社</p><p> 【2】C++課程設(shè)計(jì) 王更生 著 北京郵電大學(xué)出版社</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法演示系統(tǒng)
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用(算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--幾種排序算法的演示
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)排序算法演示系統(tǒng)58165
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--內(nèi)部排序演示
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---prim算法
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)和演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論