第一篇:《數(shù)據(jù)結(jié)構(gòu)》程序設(shè)計(jì)報(bào)告
《數(shù)據(jù)結(jié)構(gòu)》 課程設(shè)計(jì)報(bào)告
課程名稱: 課程設(shè)計(jì)題目:姓
名:
院系: 專
業(yè): 年
級: 學(xué)
號: 指導(dǎo)教師: 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì) 約瑟夫環(huán)
俞曉沁 計(jì)算機(jī)學(xué)院
計(jì)算機(jī)科學(xué)與技術(shù)
大二
0905120
4王立波
2011年5月22日
1、課程設(shè)計(jì)的目的
(1)熟練使用C++語言編寫程序,解決實(shí)際問題;
(2)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;(3)初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;(4)提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力;
2、需求分析
1、任務(wù):編號是1,2,??,n的n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一個(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è)程序來求出出列順序。
要求:利用不帶表頭結(jié)點(diǎn)的單向循環(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序輸出各個(gè)人的編號。
2、測試數(shù)據(jù)
m的初值為20,n=7 ,7個(gè)人的密碼依次為3,1,7,2,4,7,4,首先m=6,則正確的輸出是什么?
3、課程設(shè)計(jì)報(bào)告內(nèi)容
概要設(shè)計(jì)
(1)在分析題目要求的基礎(chǔ)上,我首先設(shè)計(jì)了一個(gè)節(jié)點(diǎn)的結(jié)構(gòu)體 struct LNode { int xuhao;int data;LNode *next;};
//存儲每個(gè)人的信息(序號,密碼)以及下個(gè)人的信息(2)然后構(gòu)造了類LinkList class LinkList { public:
LinkList();
void Make_L(int n);
void GetXuhao(int m,int n);private:
LNode *tail;
};
(3)基本操作
Void LinkList::LinkList();
//構(gòu)造函數(shù)
Void LinkList::Make_L(int n);//建立單向循環(huán)鏈表
Void LinkList::GetXuhao(int m,int n);//按照出列順序輸出各個(gè)人的編號(4)主函數(shù)
初始化
輸入人數(shù)n, 上限數(shù)m以及每個(gè)人的密碼.L.Make_L(n);
L.GetXuhao(m,n);
4、總結(jié)
一、這次課程設(shè)計(jì)的心得體會通過實(shí)踐我的收獲如下:
鞏固和加深了對線性表兩種存儲結(jié)構(gòu)—順序存儲和鏈?zhǔn)酱鎯Φ睦斫?,提高了綜合運(yùn)用本章節(jié)所學(xué)知識的能力。
二、根據(jù)我在實(shí)習(xí)中遇到得問題,我將在以后的學(xué)習(xí)過程中注意以下幾點(diǎn):
1、認(rèn)真上好專業(yè)課,牢固掌握課本中的基本知識。
2、寫程序時(shí)多思考,克服不愿觸碰不懂地方的障礙,完善知識結(jié)構(gòu)。
3、寫程序要嚴(yán)謹(jǐn),多寫備注,方便檢查。
4、在課余時(shí)間多翻閱課外相關(guān)書籍,多看程序,吸取別人程序中好的方法,熟悉后多加利用。
5、程序清單:
#include
{ int xuhao;int data;
LNode *next;};class LinkList { public:
LinkList();void Make_L(int n);void GetXuhao(int m,int n);private:
};
LinkList::LinkList()
{ tail=new LNode;tail->next=NULL;
} void LinkList::Make_L(int n){
} LNode *p,*q;if(n!=0){
} tail->xuhao=1;cin>>tail->data;q=tail;for(int i=2;i } tail->next=q;p=new LNode;cin>>p->data;p->xuhao=i;tail->next=p;tail=p; LNode *tail;void LinkList:: GetXuhao(int m,int n){ } int main(){ int m,n; LinkList L; cout<<“請輸入人數(shù)n:”; cin>>n; cout<<“請輸入一個(gè)正整數(shù)作為報(bào)數(shù)的上限數(shù)m:”;cin>>m;cout<<“請輸入每個(gè)人的密碼:”;L.Make_L(n);cout<<“正確的出列順序?yàn)椋骸?L.GetXuhao(m,n);LNode *p=tail,*q;int i,j;for(i=0;i j=0;while(j } p=p->next;++j;cout << p->next->xuhao<<“ ”;m=p->next->data;q=p->next;p->next=q->next;delete q;} system(“pause”); return 0;} 6、參考文獻(xiàn) [1] 萬健 主編 數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(C++版)——電子工業(yè)出版社.[2]網(wǎng)上搜索相關(guān)程序作為參考 7、程序運(yùn)行結(jié)果 《數(shù)據(jù)結(jié)構(gòu)》 課程設(shè)計(jì)報(bào)告 課程名稱: 課程設(shè)計(jì)題目:姓 名: 院系: 專 業(yè): 年 級: 學(xué) 號: 指導(dǎo)教師: 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì) 魔王語言解釋 俞曉沁 計(jì)算機(jī)學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù) 大二 0905120 4王立波 2011年5月22日 1.課程設(shè)計(jì)的目的 (5)熟練使用C++語言編寫程序,解決實(shí)際問題; (6)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;(7)初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;(8)提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力; 2.需求分析 1、[問題描述] 有一個(gè)魔王總是使用自己的一種非常精練而又抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋成人能聽懂的語言,因?yàn)樗恼Z言是由以下兩種形式的規(guī)則由人的語言逐步抽象上去的: (1)α -> β1β2?βm(2)(θδ1δ2?δn)->θδnθδn-1? θδ1θ 在這兩種形式中,從左到右均表示解釋。試寫一個(gè)魔王語言的解釋系統(tǒng),把他的話解釋成人能聽得懂的話。[基本要求] 用下述兩條具體規(guī)則和上述規(guī)則形式(2)實(shí)現(xiàn)。設(shè)大寫字母表示魔王語言的詞匯;小寫字母表示人的語言詞匯;希臘字母表示可以用大寫字母或小寫字母代換的變量。魔王語言可含人的詞匯。 (1)B -> tAdA(2)A -> sae [測試數(shù)據(jù)] B(ehnxgz)B解釋成tsaedsaeezegexenehetsaedsae 若將小寫字母與漢字建立下表所示的對應(yīng)關(guān)系,則魔王說的話是:“天上一只鵝地上一只鵝鵝追鵝趕鵝下鵝蛋鵝恨鵝天上一只鵝地上一只鵝”。[小寫字母與漢字對應(yīng)關(guān)系] t d s a e z g x n h 天 地 上 一只 鵝 追 趕 下 蛋 恨 3、課程設(shè)計(jì)報(bào)告內(nèi)容 概要設(shè)計(jì) (1)建立了一個(gè)結(jié)構(gòu)體,用來定義棧 struct SeqStack { char elem[Stack_Size]; int top;};(2)基本操作 void InitStack(SeqStack *s)//構(gòu)建棧 void Push(SeqStack *s,char x) //入棧 void Pop(SeqStack *s,char *x) //出棧 int Empty(SeqStack *s) //判棧是否為空 (3)主函數(shù) 定義所需的棧并初始化 輸入要翻譯的魔王語言,入棧s 將tAdA入棧B,將sae入棧A 翻譯魔王語言:while(Empty(&s)) { …..if(ch=='B'){…} else if(ch=='A'){…} else if(ch==')'){…} else Push(&r,ch); } 輸出翻譯后的結(jié)果 選擇是否繼續(xù)翻譯為漢語: 輸入1-? 輸出翻譯后的漢語,然后結(jié)束程序 輸入0-? 結(jié)束程序 4、總結(jié) 一、這次課程設(shè)計(jì)的心得體會通過實(shí)踐我的收獲如下: 鞏固和加深了對棧的理解,熟練地掌握了棧的運(yùn)用(棧的初始化,判???,入棧,出棧等)。 二、根據(jù)我在實(shí)習(xí)中遇到得問題,我將在以后的學(xué)習(xí)過程中注意以下幾點(diǎn): 1、認(rèn)真上好專業(yè)課,牢固掌握課本中的基本知識。 2、寫程序時(shí)多思考,克服不愿觸碰不懂地方的障礙,完善知識結(jié)構(gòu)。 3、寫程序要嚴(yán)謹(jǐn),多寫備注,方便檢查。 4、在課余時(shí)間多翻閱課外相關(guān)書籍,多看程序,吸取別人程序中好的方法,熟悉后多加利用。 5、程序清單: #include struct SeqStack //定義棧 { char elem[Stack_Size]; int top;}; void InitStack(SeqStack *s)//構(gòu)建棧 { s->top=-1;} void Push(SeqStack *s,char x) //入棧 { if(s->top==Stack_Size-1) cout<<“棧已滿!”< else { s->top++;s->elem[s->top]=x; } } void Pop(SeqStack *s,char *x) //出棧 { if(s->top==-1) cout<<“棧為空!”< else { *x=s->elem[s->top]; s->top--; } } int Empty(SeqStack *s) //判棧是否為空 { if(s->top==-1) return(0); else return(1);} void main(){ SeqStack B,A,s,B1,A1,r,M,R; //定義棧 char ch,ch1,ch2,x; char aa[100]; int n; InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M); //對定義的棧初始化 cout< //輸入要翻譯的魔王語言 cin>>aa; Push(&B,'t');Push(&B,'A');Push(&B,'d');Push(&B,'A'); //進(jìn)棧B→tAdA Push(&A,'s');Push(&A,'a');Push(&A,'e'); //進(jìn)棧A→sae for(int i=0;aa[i]!='