




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 實(shí)驗(yàn)一 類和對(duì)象實(shí)驗(yàn)課程名:面向?qū)ο蟪绦蛟O(shè)計(jì)(C+)專業(yè)班級(jí): 學(xué)號(hào): 姓名: 實(shí)驗(yàn)時(shí)間: 實(shí)驗(yàn)地點(diǎn): 指導(dǎo)教師: 一、實(shí)驗(yàn)?zāi)康暮鸵?1) 理解類和對(duì)象的概念,掌握聲明類和定義對(duì)象的方法。(2) 掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的實(shí)現(xiàn)方法。(3) 初步掌握使用類和對(duì)象編制C+程序。(4) 掌握對(duì)象數(shù)組、對(duì)象指針和string類的使用方法。(5) 掌握使用對(duì)象、對(duì)象指針和對(duì)象引用作為函數(shù)參數(shù)的方法。(6) 掌握類對(duì)象作為成員的使用方法。(7) 掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法。(8) 理解友元的概念和掌握友元的使用方法。二、實(shí)驗(yàn)內(nèi)容1設(shè)計(jì)一個(gè)靜態(tài)數(shù)組存儲(chǔ)結(jié)構(gòu)的順序表類,要求編程實(shí)現(xiàn)如下任務(wù):建
2、立一個(gè)線性表,首先依次輸人數(shù)據(jù)元素1,2,3,10,然后刪除數(shù)據(jù)元素6,最后依次顯示當(dāng)前線性表中的數(shù)據(jù)元素。要求采用順序表實(shí)現(xiàn),假設(shè)該順序表的數(shù)據(jù)元素個(gè)數(shù)在最壞情況下不會(huì)超過50個(gè)。實(shí)驗(yàn)代碼:#includeusing namespace std;const int MaxSize=100; /100只是示例性的數(shù)據(jù),可根據(jù)實(shí)際問題具體定義template /定義模板類SeqListclass SeqListpublic: SeqList( ) length=0; /無參構(gòu)造函數(shù) SeqList(T a , int n); /有參構(gòu)造函數(shù) SeqList( ) /析構(gòu)函數(shù)為空 int Leng
3、th( ) return length; /求線性表的長度 T Get(int i); /按位查找,取線性表的第i個(gè)元素 int Locate(T x ); /按值查找,求線性表中值為x的元素序號(hào) void Insert(int i, T x); /在線性表中第i個(gè)位置插入值為x的元素 T Delete(int i); /刪除線性表的第i個(gè)元素 void PrintList( ); /遍歷線性表,按序號(hào)依次輸出各元素private: T dataMaxSize; /存放數(shù)據(jù)元素的數(shù)組 int length; /線性表的長度;template SeqList:SeqList(T a , int
4、n)int i; if (nMaxSize) throw 參數(shù)非法; for (i=0; in; i+) datai=ai; length=n;template T SeqList:Get(int i) if (ilength) throw 查找位置非法; else return datai-1;template int SeqList:Locate(T x)int i; for (i=0; ilength; i+) if (datai=x) return i+1; /下標(biāo)為i的元素等于x,返回其序號(hào)i+1 return 0; /退出循環(huán),說明查找失敗template void SeqList
5、:Insert(int i, T x)int j; if (length=MaxSize) throw 上溢; if (ilength+1) throw 位置;for (j=length; j=i; j-) dataj=dataj-1; /注意第j個(gè)元素存在數(shù)組下標(biāo)為j-1處datai-1=x;length+;template T SeqList:Delete(int i)T x;int j; if (length=0) throw 下溢; if (ilength) throw 位置; x=datai-1; for (j=i; jlength; j+) dataj-1=dataj; /注意此處
6、j已經(jīng)是元素所在的數(shù)組下標(biāo) length-; return x;templatevoid SeqList:PrintList()int i;for(i=0;ilength;i+)coutdatai ;coutendl;int main()int m,n,t;int a10=0,1,2,3,4,5,6,7,8,9;SeqList seq(a,10);SeqList *p;p=&seq;cout線性表的長度為:Length()PrintList();cout請(qǐng)輸入要查找元素的位置:n; cout您所要找的元素為:Get(n)endl;cout請(qǐng)輸入要查找的元素值:n;cout該值所在的位置為:Lo
7、cate(n)endl;cout請(qǐng)分別輸入插入位置與要插入的元素nt;p-Insert(n,t);p-PrintList();cout請(qǐng)輸入要?jiǎng)h除的元素所在的位置:n;p-Delete(n);p-PrintList(); return 0;運(yùn)行結(jié)果:2設(shè)計(jì)一個(gè)帶頭結(jié)點(diǎn)的單鏈表類,要求:(1)生成一個(gè)整數(shù)線性表,實(shí)現(xiàn)將其分解成兩個(gè)鏈表,其中一個(gè)全部為奇數(shù),另一個(gè)全部為偶數(shù)(盡量利用已知的存儲(chǔ)空間)。(2)設(shè)計(jì)一個(gè)測試主函數(shù),實(shí)際運(yùn)行驗(yàn)證所設(shè)計(jì)單鏈表類的正確性。實(shí)驗(yàn)代碼:#includeusing namespace std;template struct Node T data; Node *n
8、ext; /此處也可以省略;template class LinkListpublic:LinkList( )first=new Node; first-next=NULL; /建立只有頭結(jié)點(diǎn)的空鏈表 LinkList(T a , int n); /建立有n個(gè)元素的單鏈表LinkList( ); /析構(gòu)函數(shù)int Length( ); /求單鏈表的長度T Get(int i); /取單鏈表中第i個(gè)結(jié)點(diǎn)的元素值int Locate(T x); /求單鏈表中值為x的元素序號(hào)void Insert(int i, T x); /在單鏈表中第i個(gè)位置插入元素值為x的結(jié)點(diǎn)T Delete(int i);
9、/在單鏈表中刪除第i個(gè)結(jié)點(diǎn)void PrintList( ); /遍歷單鏈表,按序號(hào)依次輸出各元素Node *first; /單鏈表的頭指針;templateLinkList:LinkList(T a , int n)/頭查法建立單鏈表int i;Node *s;first=new Node; first-next=NULL; /初始化一個(gè)空鏈表 for (i=n-1; i=0; i-) s=new Node; s-data=ai; /為每個(gè)數(shù)組元素建立一個(gè)結(jié)點(diǎn) s-next=first-next; /插入到頭結(jié)點(diǎn)之后 first-next=s; templateLinkList:LinkLi
10、st( )/析構(gòu)函數(shù)Node *p,*q;p=first;while(p)q=p;p=p-next;delete q;templateint LinkList:Length( )/求鏈表的長度int i=0;Node *p;p=first;while(p)p=p-next;i+;return i-1;templateT LinkList:Get(int i)/求單鏈表中第i個(gè)元素的值int n=0; Node *p;p=first;while(p&in)p=p-next;n+; return p-data;templateint LinkList:Locate(T x)/求單鏈表中值為x的元素
11、序號(hào)int i;Node *p;p=first;for(i=0;p;i+)if(p-data=x)return i;p=p-next;templatevoid LinkList:PrintList( )/輸出函數(shù)Node *p;p=first-next;while(p)coutdatanext;coutendl;templatevoid LinkList:Insert(int i, T x)/在第i個(gè)位置插入元素xint n=0;Node *p,*q;p=first;while(p&nnext;+n;q=new Node;q-data=x;q-next=p-next;p-next=q;temp
12、lateT LinkList:Delete(int i)/刪除第i個(gè)結(jié)點(diǎn)int n=0;Node *p,*q;p=first;while(p-next&nnext;+n;q=p-next;p-next=q-next;return q-data;delete q;int main()Node *p,*q,*r;int a10=0,1,2,3,4,5,6,7,8,9;LinkList L1(a,10),L2,L3;/定義三個(gè)鏈表coutL1.Length()next,q=L2.first,r=L3.first;L2.first=new Node; L2.first-next=NULL; L3.fi
13、rst=new Node; L3.first-next=NULL; while(p)/當(dāng)鏈表L1中有元素時(shí)進(jìn)行循環(huán)if(p-data%2=0)/當(dāng)L1中的元素為偶數(shù)時(shí)插入L2 q=new Node; q-data=p-data; q-next=L2.first-next; L2.first-next=q;else r=new Node;r-data=p-data; r-next=L3.first-next; L3.first-next=r;p=p-next;L1.PrintList( ); L2.PrintList( );L3.PrintList( ); cout鏈表的長度為:L1.Lengt
14、h( )endl;cout鏈表的第四個(gè)元素為:L1.Get(4)endl; cout鏈表中元素5為第L1.Locate(5)個(gè)元素endl;L1.Insert(4, 17);cout插入元素后鏈表為:; L1.PrintList( );L1.Delete(8);cout刪除第8個(gè)元素后鏈表變?yōu)椋? L1.PrintList( );return 0;實(shí)驗(yàn)結(jié)果:3設(shè)計(jì)一個(gè)不帶頭結(jié)點(diǎn)的單鏈表類,要求: (1)不帶頭結(jié)點(diǎn)單鏈表類的成員函數(shù)包括取數(shù)據(jù)元素個(gè)數(shù)、插入元素、刪除所有值為k的元素、取數(shù)據(jù)元素。 (提示:要考慮在第一個(gè)數(shù)據(jù)元素結(jié)點(diǎn)前插入和刪除第一個(gè)數(shù)據(jù)元素結(jié)點(diǎn)時(shí)與在其他位置插入和刪除其他位置結(jié)點(diǎn)
15、時(shí)的不同情況。)(2)設(shè)計(jì)一個(gè)測試主函數(shù),實(shí)際運(yùn)行驗(yàn)證所設(shè)計(jì)循環(huán)單鏈表類的正確性。實(shí)驗(yàn)代碼:#includeusing namespace std;templatestruct NodeT data;Node *next;templateclass LinkListpublic: LinkList( )first=new Node; first-next=NULL; /建立只有頭結(jié)點(diǎn)的空鏈表LinkList(T a,int n); LinkList( );int Length( ); /求單鏈表的長度T Get(int i); /取單鏈表中第i個(gè)結(jié)點(diǎn)的元素值void Insert(int i,
16、 T x); /在單鏈表中第i個(gè)位置插入元素值為x的結(jié)點(diǎn) T Delete(int i); /在單鏈表中刪除第i個(gè)結(jié)點(diǎn) void PrintList( ); /遍歷單鏈表,按序號(hào)依次輸出各元素 private: Node *first; /單鏈表的頭指針;templateLinkList:LinkList(T a,int n)int i=1;Node *p,*q;first=new Node;first-data=a0;first-next=NULL;p=first;for(i=1;in;i+)q=new Node;q-data=ai;q-next=NULL;p-next=q;p=q;temp
17、lateLinkList:LinkList()Node *p;p=first;while(p)p=p-next;delete first;first=p;templateint LinkList:Length( )int i=0;Node *p;p=first;while(p)p=p-next;i+;return i;templateT LinkList:Get(int i)int j=1; Node *p;p=first;while(p&jnext;j+;return p-data;templatevoid LinkList:Insert(int i, T x)int j=1;Node *p
18、,*q;p=first;while(p&jnext;j+;q=new Node;q-data=x;q-next=p-next;p-next=q;templateT LinkList:Delete(int i)int j=1;Node *p,*q;p=first;while(p&jnext;j+;q=p-next; p-next=q-next;return q-data;delete q;templatevoid LinkList:PrintList()Node *p;p=first;while(p)coutdatanext;coutendl;int main()int a10=0,1,2,3,
19、4,5,6,7,8,9;LinkList L(a,10);cout鏈表長為:L.Length()endl;cout鏈表的第6個(gè)元素為:L.Get(6)endl;L.Insert(5,17);cout在鏈表第5個(gè)位置插入元素17后鏈表變?yōu)椋?L.PrintList();L.Delete(8);cout0)個(gè)人按順時(shí)針方向圍坐-圈,每人持有一個(gè)正整數(shù)密碼。開始時(shí)任意給出一個(gè)報(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è)程序模擬此過程,并給出出
20、列人的編號(hào)序列。 測試數(shù)據(jù): n=7,7個(gè)人的密碼依次為3,1,7,2,4,8,4 初始報(bào)數(shù)上限值m=20實(shí)驗(yàn)代碼:#includeusing namespace std;struct Node/定義一個(gè)接點(diǎn)包含編號(hào),密碼,指針變量int num;int code;int data;/標(biāo)志位,當(dāng)該人沒有被踢出時(shí)為1 Node *next;class CirListpublic:void Done();/踢人,實(shí)現(xiàn)約瑟夫環(huán)的功能CirList();/構(gòu)造函數(shù),建立一個(gè)帶頭結(jié)點(diǎn)的循環(huán)鏈表void inputcode();/輸入密碼private:Node *first;int person;/定義
21、游戲人數(shù);CirList:CirList()int i;Node *p;first=new Node;first-next=NULL;coutperson;for(i=person;i0;i-)p=new Node;p-num=i;p-data=1;p-next=first-next;first-next=p;while(p-next)p=p-next;p-next=first;void CirList:inputcode()Node *p;int i;p=first-next;cout請(qǐng)輸入每個(gè)人的密碼:;for(i=0;ip-code;p=p-next;void CirList:Done(
22、)int m=20,n,i=1;Node *p;p=first;p=p-next; for(n=person;n0;n-)while(i!=m)p=p-next;if(p-data=1)i+; coutnumcode;p-data=0;i=0;coutendl;int main()CirList list;list.inputcode();list.Done();return 0;實(shí)驗(yàn)結(jié)果:*5設(shè)計(jì)一個(gè)帶頭結(jié)點(diǎn)的循環(huán)雙向鏈表類,要求:(1)帶頭結(jié)點(diǎn)循環(huán)雙向鏈表類的成員函數(shù)包括:取數(shù)據(jù)元素個(gè)數(shù)、插入、刪除、取數(shù)據(jù)元素。 (2)設(shè)計(jì)一個(gè)測試主函數(shù),實(shí)際運(yùn)行驗(yàn)證所設(shè)計(jì)循環(huán)雙向鏈表類的正確性實(shí)驗(yàn)代碼:
23、#includeusing namespace std;templatestruct NodeT data;Node *next,*front;template class LinkListpublic:LinkList( )first=new Node; first-next=NULL;first-front=NULL; /建立只有頭結(jié)點(diǎn)的空鏈表 LinkList(T a , int n); /建立有n個(gè)元素的雙向鏈表LinkList( ); /析構(gòu)函數(shù)int Length( ); /求雙向鏈表的長度T Get(int i); /取雙向鏈表中第i個(gè)結(jié)點(diǎn)的元素值int Locate(T x);
24、 /求雙向鏈表中值為x的元素序號(hào)void Insert(int i, T x); /在雙向鏈表中第i個(gè)位置插入元素值為x的結(jié)點(diǎn)T Delete(int i); /在雙向鏈表中刪除第i個(gè)結(jié)點(diǎn)void PrintList( ); /遍歷單鏈表,按序號(hào)依次輸出各元素private:Node *first; /雙向鏈表的頭指針;templateLinkList:LinkList(T a,int n)int i;Node *p,*q;first=new Node;first-front=NULL;first-next=NULL;p=new Node;p-data=a0;first-next=p;p-fr
25、ont=first;p-next=NULL;for(i=1;in;i+)q=new Node;q-front=p;p-next=q;q-next=NULL;q-data=ai;p=q; p-next=first;first-front=p;templateLinkList:LinkList()Node *p,*q;p=first;while(p-next=first)q=p;p=p-next;delete q;p-front=NULL;delete p;templateint LinkList:Length()Node *p;int i=0;p=first;while(p-next!=firs
26、t)p=p-next;i+;return i;templateT LinkList:Get(int i)Node *p;int j=0;p=first;while(jnext!=first)p=p-next;j+; return p-data;templateint LinkList:Locate(T x)int i=0;Node *p;p=first; while(p-data!=x&p-next!=first)p=p-next;i+;return i;templatevoid LinkList:Insert(int i, T x)Node *p,*q;int j=0;p=first; wh
27、ile(jnext!=first)p=p-next;j+;q=new Node;q-data=x;q-next=p-next;p-next-front=q;p-next=q;q-front=p;templateT LinkList:Delete(int i)Node *p,*q;int j=0;p=first; while(jnext!=first)p=p-next;j+;q=p-next;p-next=q-next; q-next-front=p;delete q;return q-data;templatevoid LinkList:PrintList( )/輸出函數(shù)Node *p;p=f
28、irst-next;while(p!=first)coutdatanext;coutendl;int main()int a10=0,1,2,3,4,5,6,7,8,9;LinkList L(a,10);L.PrintList( ); cout鏈表的長度為:L.Length( )endl;cout鏈表的第四個(gè)元素為:L.Get(4)endl; cout鏈表中元素5為第L.Locate(5)個(gè)元素endl;L.Insert(4, 17);cout在第四個(gè)位置插入元素17后鏈表為:; L.PrintList( );L.Delete(8);cout刪除第8個(gè)元素后鏈表變?yōu)椋? L.PrintList
29、( );return 0;實(shí)驗(yàn)結(jié)果:*6設(shè)計(jì)一個(gè)單鏈表實(shí)現(xiàn)一元多項(xiàng)式求和問題。要求: (1)設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)表示一元多項(xiàng)式; (2)設(shè)計(jì)算法實(shí)現(xiàn)一元多項(xiàng)式相加。 實(shí)驗(yàn)代碼:#include using namespace std;struct Nodeint e;int x;Node *next; ;class LinkListpublic:LinkList()first=new Node;first-next=NULL;LinkList(int a,int b,int n); /建立有n個(gè)元素的單鏈表void PrintList(LinkList &L); /遍歷單鏈表,按序號(hào)依次輸出各元素fr
30、iend void function (LinkList &La,LinkList &Lb,LinkList &Lc);/友元函數(shù),多項(xiàng)式的加減private:Node *first; /單鏈表的頭指針;LinkList :LinkList(int a,int b,int n)/生成多項(xiàng)式first=new Node; /生成頭結(jié)點(diǎn)Node *r=first; /尾指針初始化for ( int i=0; ie=ai;s-x=bi;r-next=s; r=s; /插入到終端結(jié)點(diǎn)之后r-next=NULL; /單鏈表建立完畢,將終端結(jié)點(diǎn)的指針域置空void LinkList :PrintList(LinkList &L) /輸出多項(xiàng)式coutnext;while(p)if(!p-next)coutxxeendl;else coutxxenext;int main () void function(LinkList &La,L
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鼻科學(xué)解剖學(xué)合同
- 車輛抵押貸款服務(wù)合同模板下載
- 智能制造企業(yè)代理記賬及智能制造財(cái)務(wù)合同
- 老人發(fā)熱護(hù)理課件
- 消防安全月檢查記錄表
- 路燈安全生產(chǎn)管理制度
- 安全管理資格證書查詢
- 美術(shù)課件作品介紹
- 美術(shù)人物介紹課件
- 消防安全巡視檢查表
- GB/T 32798-2016XP型行星齒輪減速器
- GB/T 16451-1996天然脂肪醇
- (約克)機(jī)組熱回收技術(shù)
- 《小學(xué)趣味語文》PPT課件(優(yōu)秀)
- 疫苗及其制備技術(shù)課件
- 世界衛(wèi)生組織-人瘤病毒疫苗:世衛(wèi)組織立場文件2022年5月(英譯中)
- (完整版)常見腫瘤AJCC分期手冊(cè)第八版(中文版)
- 《企業(yè)轉(zhuǎn)型升級(jí)研究》文獻(xiàn)綜述(3000字)
- 人教版PEP初中八年級(jí)下冊(cè)英語全冊(cè)課件
- 幼兒園大班數(shù)學(xué):《認(rèn)識(shí)單雙數(shù)》課件
- 日本文化介紹
評(píng)論
0/150
提交評(píng)論