南昌大學實驗報告-數(shù)據(jù)結(jié)構(gòu)_第1頁
南昌大學實驗報告-數(shù)據(jù)結(jié)構(gòu)_第2頁
南昌大學實驗報告-數(shù)據(jù)結(jié)構(gòu)_第3頁
南昌大學實驗報告-數(shù)據(jù)結(jié)構(gòu)_第4頁
南昌大學實驗報告-數(shù)據(jù)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、實 驗 報 告課程名稱: 數(shù)據(jù)結(jié)構(gòu)實驗 學生姓名: 巢江南 學 號: 6100412249 專業(yè)班級: 2012級數(shù)字媒體1班 2014 年 6 月 26日目 錄實驗一: 長方形實驗二: 順序表實驗三: 非循環(huán)單鏈表實驗四: 循環(huán)雙鏈表 南昌大學實驗報告學生姓名: 巢江南 學 號: 6100412249 專業(yè)班級: 數(shù)字媒體技術(shù)121班 實驗類型: 驗證 綜合 設計 創(chuàng)新 實驗日期: 實驗成績: 一、 實驗項目名稱長方形二、 實驗目的熟悉C+類的定義熟悉構(gòu)造函數(shù),析構(gòu)函數(shù)和拷貝初始化構(gòu)造函數(shù)三、實驗步驟1.添加基類頭文件2.添加派生類頭文件3.添加測試頭文件4.添加主程序文件main.cpp5

2、.編譯運行四、實驗數(shù)據(jù)及處理結(jié)果 MY-2.2.3.cpp 測試長方形的算法#include <iostream>using namespace std;/ MyExampleClass.h長方形數(shù)據(jù)結(jié)構(gòu)c+類定義(派生類)#ifndef MYEXAMPLECLASS_H#define MYEXAMPLECLASS_H#include "MyExampleClass.h"#endif/ex2_1_Text.h長方形類的測試文件#ifndef EX2_1_TEST_H#define EX2_1_TEST_H#include "ex2_1_Test.h&q

3、uot;#endifvoid main()MyRectangle<float> rec; /自動調(diào)用不帶參數(shù)的構(gòu)造函數(shù)int choose; /存放操作的代碼char continueYesNo='N' /判斷是否繼續(xù)while (1)choose=0;system("cls");cout<<endl;cout<<"*測試長方形的操作*"<<endl<<endl;cout<<"t1.設置長方形的序號"<<endl;cout<<

4、;"t2.設置長方形的長"<<endl;cout<<"t3.重載賦值運算符的定義"<<endl;cout<<"t4.設置長方形的寬"<<endl;cout<<"t5.輸出長方形的面積"<<endl;/操作擴展的菜單添加區(qū)cout<<" 其他.結(jié)束"<<endl<<endl;cout<<" /"<<endl;displayCurrent

5、Object(rec);cout<<"/"<<endl<<endl;cout<<" 請選擇你要操作的代碼 (1 -5) 號碼:"cin>>choose;if (choose>0 && choose<6)/ 后面的1是菜單選項數(shù)的上限,視已有菜單數(shù)而定system("cls");displayCurrentObject(rec);switch (choose) case 1: ex2_1_1(rec,continueYesNo); /設置長方形的序號

6、break; case 2: ex2_1_2(rec,continueYesNo); /設置長方形的長break; case 3: ex2_1_3(rec,continueYesNo); /重載賦值運算符的定義break;case 4: ex2_1_4(rec,continueYesNo); /設置長方形的寬break;case 5: ex2_1_5(rec,continueYesNo); break;/ 操作擴展的測試添加區(qū)域default: cout<<" n 你選擇了結(jié)束."<<endl<<endl;return;if (conti

7、nueYesNo='N'|continueYesNo='n')break;/ExampleClass.h長方形數(shù)據(jù)結(jié)構(gòu)c+定義(基類)/長方形數(shù)據(jù)結(jié)構(gòu)c+類聲明(基類)template <typename ElemType>class Rectanglepublic:/長方形的序號類class RectangleNopublic:int no; /存放長方形的序號;/基類操作的擴展區(qū)域/ 下面為系統(tǒng)自動調(diào)用的構(gòu)造函數(shù)及析構(gòu)函數(shù)聲明/長方形構(gòu)造函數(shù)Rectangle ();/長方形拷貝初始化構(gòu)造函數(shù)Rectangle(const Rectangle&a

8、mp; otherD); /長方形析構(gòu)函數(shù)virtual Rectangle();/設置長方形序號void setNo(int i);/設置長方形的長void setLength(ElemType l);/設置長方形的寬void setWidth(ElemType l);/長方形面積ElemType area();/重載賦值運算符的定義Rectangle operator =(Rectangle rightR);protected:ElemType length; /長方形的長ElemType width; /長方形的寬RectangleNo myNo; /長方形的序號;/長方形數(shù)據(jù)結(jié)構(gòu)c+類

9、實現(xiàn)(基類)/ 下面為系統(tǒng)自動調(diào)用的構(gòu)造函數(shù)及析構(gòu)函數(shù)的實現(xiàn)/ 功能:長方形構(gòu)造函數(shù)/ 說明:構(gòu)造函數(shù)用于初始化一個空的長方形對象template <typename ElemType>Rectangle<ElemType>:Rectangle()length=width=0;cout<<"自動調(diào)用構(gòu)造函數(shù)"<<endl;/ 功能:長方形拷貝初始化構(gòu)造函數(shù)/ 輸入:函數(shù)的參數(shù) otherD 為用于拷貝初始化的長方形對象/ 步驟:把長方形對象 otherD 的長寬等特性賦值給當前長方形對象template <typenam

10、e ElemType>Rectangle<ElemType>:Rectangle(const Rectangle<ElemType>& otherD)/把長方形對象 otherD的長寬等特性賦值給當前長方形對象length=otherD.length;width=otherD.width;myNo=otherD.myNo;cout<<"自動調(diào)用拷貝初始化構(gòu)造函數(shù)初始化為("cout<<length<<","<<width<<")"<

11、<endl;/功能:長方形析構(gòu)函數(shù)/說明:對象生存期結(jié)束時,系統(tǒng)自動調(diào)用該對象所屬類的析構(gòu)函數(shù)template <typename ElemType>Rectangle <ElemType>:Rectangle()cout<<"n 第"<<myNo.no<<"個長方形對象("<<length<<","<<width<<"生存期結(jié)束!)"<<endl;/設置長方形的序號template <

12、;typename ElemType>void Rectangle<ElemType>:setNo(int i)myNo.no=i;/ 功能:重載賦值運算符的定義/ 輸入:函數(shù)的值參 rightR 為賦值運算符右邊的長方形/ 輸出:賦值運算符左邊長方形(即當前長方形)被賦值為rightR/ 步驟:/ (1) 判斷左邊長方形是否等于 rightR 如相等就轉(zhuǎn)步驟三 否則就繼續(xù)步驟二/ (2) 賦值/ (3) 通過函數(shù)的返回值返回左邊長方形后返回template <typename ElemType>Rectangle<ElemType> Rectangl

13、e<ElemType>:operator=(Rectangle<ElemType> rightR)/判斷左邊長方形是否等于 rightRif(this !=& rightR)length=rightR.length;width=rightR.width;myNo=rightR.myNo;cout<<" 賦值后,當前長方形為 ("<<length<<","<<width<<")"<<endl;return *this; / 功能:設置

14、長方形的長/ 輸入:函數(shù)的值參1為待設置的長template <typename ElemType>void Rectangle<ElemType>:setLength(ElemType l)length=l;/ 功能:設置長方形的寬/ 輸入:函數(shù)的值參1為待設置的寬template <typename ElemType>void Rectangle<ElemType>:setWidth(ElemType l)width=l;/ 功能:求長方形面積template <typename ElemType>ElemType Rectang

15、le<ElemType>:area()return length*width;/ MyExampleClass.h 長方形數(shù)據(jù)結(jié)構(gòu) c+類定義(派生類)/ExampleClass.h長方形數(shù)據(jù)結(jié)構(gòu)c+類定義(基類)#ifndef EXAMPLECLASS_H#define EXAMPLECLASS_H#include "ExampleClass.h"#endif/長方形數(shù)據(jù)結(jié)構(gòu) c+ 類聲明(派生類)template <typename ElemType>class MyRectangle:public Rectangle<ElemType&g

16、t;public:/ 類對象的輸入輸出函數(shù)/輸出長方形void read(istream& in);/輸出長方形void display (ostream& out)const;/長方形數(shù)據(jù)結(jié)構(gòu)c+類實現(xiàn)(派生類)/功能:輸出長方形/說明:輸入長方形的長和寬template <typename ElemType>void MyRectangle<ElemType>:read(istream& in)cout<<" 請輸入第"<<myNo.no<<"個長方形對象"<&

17、lt;endl;cout<<" 長方形中的長:"in>>length;cour<<" 長方形中的寬:"in>>width;/功能:重載輸入運算符的定義/說明:通過本函數(shù),可以使用c+中cin直接從鍵盤上輸入長方形template <typename ElemType>istream& operator>>(istream& in,MyRectangle<ElemType>& iD)iD.read(in);return in;/功能:輸出長方形/步驟

18、:輸出長方形的長和寬template <typename ElemType>void MyRectangle<ElemType>:display(ostream& out)constout<<" 第"<<myNo.no<<"個長方形對象 長="<<length<<"t寬="<<width<<endl;/功能:重載輸出運算符的定義/說明:通過本函數(shù),可以使用c+中out直接從屏幕上輸出長方行template <typ

19、ename ElemType>ostream& operator<< (ostream& out,const MyRectangle<ElemType>& oD)oD.display(out);return out;/ MY-2.2.3.cpp 測試長方形的算法#include <iostream>using namespace std;/ MyExampleClass.h長方形數(shù)據(jù)結(jié)構(gòu)c+類定義(派生類)#ifndef MYEXAMPLECLASS_H#define MYEXAMPLECLASS_H#include "

20、;MyExampleClass.h"#endif/ex2_1_Text.h長方形類的測試文件#ifndef EX2_1_TEST_H#define EX2_1_TEST_H#include "ex2_1_Test.h"#endifvoid main()MyRectangle<float> rec; /自動調(diào)用不帶參數(shù)的構(gòu)造函數(shù)int choose; /存放操作的代碼char continueYesNo='N' /判斷是否繼續(xù)while (1)choose=0;system("cls");cout<<end

21、l;cout<<"*測試長方形的操作*"<<endl<<endl;cout<<"t1.設置長方形的序號"<<endl;cout<<"t2.設置長方形的長"<<endl;cout<<"t3.重載賦值運算符的定義"<<endl;cout<<"t4.設置長方形的寬"<<endl;cout<<"t5.輸出長方形的面積"<<endl

22、;/操作擴展的菜單添加區(qū)cout<<" 其他.結(jié)束"<<endl<<endl;cout<<" /"<<endl;displayCurrentObject(rec);cout<<"/"<<endl<<endl;cout<<" 請選擇你要操作的代碼 (1 -5) 號碼:"cin>>choose;if (choose>0 && choose<6)/ 后面的1是菜單選項數(shù)的上限

23、,視已有菜單數(shù)而定system("cls");displayCurrentObject(rec);switch (choose) case 1: ex2_1_1(rec,continueYesNo); /設置長方形的序號break; case 2: ex2_1_2(rec,continueYesNo); /設置長方形的長break; case 3: ex2_1_3(rec,continueYesNo); /重載賦值運算符的定義break;case 4: ex2_1_4(rec,continueYesNo); /設置長方形的寬break;case 5: ex2_1_5(rec

24、,continueYesNo); break;/ 操作擴展的測試添加區(qū)域default: cout<<" n 你選擇了結(jié)束."<<endl<<endl;return;if (continueYesNo='N'|continueYesNo='n')break;運行結(jié)果五、體會或?qū)Ω倪M實驗的建議通過本次試驗,對類的定義有了初步的了解,在調(diào)試程序時出現(xiàn)的問題也在與同學的交流中得到解決,熟悉了構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝初始化構(gòu)造函數(shù)。 南昌大學實驗報告學生姓名: 巢江南 學 號: 6100412249 專業(yè)班級: 數(shù)

25、字媒體技術(shù)121班 實驗類型: 驗證 綜合 設計 創(chuàng)新 實驗日期: 實驗成績: 一、 實驗項目名稱順序表二實驗目的熟悉順序表的存儲結(jié)構(gòu)熟悉瞬順序表的操作熟悉順序表的C+語言定義三 實驗步驟1. 在第i個元素之前插入一個元素2. 判斷順序表是否為空3. 求順序表中元素的個數(shù)4. 取第i個元素5. 查找第一個與e滿足compare()關(guān)系的元素6. 返回某元素前驅(qū),返回某元素后繼7. 刪除第i個元素8. 把順序表賦值給另一個順序表四、實驗代碼及處理結(jié)果程序代碼如下:/ex_Test測試頭文件/顯示當前的順序表template <typename ElemType>void displa

26、yCurrentObject(MySqList<ElemType> sql)cout << endl;cout << sql;/生成隨機函數(shù)/*生成隨機*template <typename ElemType>void ex_3_1(MySqList<ElemType>& sql, char& continueYesNo)cout << "*隨機生成順序表*" << endl << endl;sql.Gsrand(); /調(diào)用了MySqList.h文件中的函數(shù)co

27、ut << sql;cout << "*" << endl << endl;cout << "還想繼續(xù)嗎?(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/*在第i個元素之前插入一個元素*/template<typename ElemType>void ex_3_2(MySqList<ElemType>& sql, char& continueYesNo)int i;ElemType e;cout << endl

28、;cout << "*" << "在第i個元素之前插入有一個元素" << "*"<<endl<<endl;cout << "請輸入你要在第幾個元素之前插入元素:"cin >> i;cout << "請輸入你要插入的元素的值:"cin >> e;cout << "你要在第" << i << "個元素之前插入元素"&l

29、t;<e<<endl;sql.insert( i,e); /調(diào)用了SqList.h中的函數(shù)insertcout << sql;cout << "*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/判斷順序表是否為空 /template<typename ElemType>void ex_3_3(MySqList<ElemType>& sql, char

30、& continueYesNo)cout << "*判斷順序表是否為空*"<<endl;if (sql.isEmpty()cout << "當前順序表為空" << endl;elsecout << "當前順序表不為空" << endl;cout << "*" << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;

31、/*求順序表中元素的個數(shù)*template<typename ElemType>void ex_3_4(MySqList<ElemType>& sql, char& continueYesNo)/隨機生成順序表cout << "*求順序表中元素的個數(shù)*"<<endl<<endl;cout << "順序表元素的個數(shù)為:" << sql.getListSize()<<endl<<endl;cout << "*&qu

32、ot; << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/取第i個元素template<typename ElemType>void ex_3_5(MySqList<ElemType>& sql, char& continueYesNo)int i;ElemType e;cout << endl << endl;cout << "*取第i個元素*" &l

33、t;< endl;cout << "請輸入你想取的元素的序號(1-" << sql.getListSize() << "):"cin >> i;cout << endl << endl;sql.getElem(i, e);cout << "你想取的第" << i << "個元素的值為:" <<e<< endl;cout << "*" <<

34、; endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/查找第一個與e滿足compare()關(guān)系的元素template<typename ElemType>void ex_3_6(MySqList<ElemType>& sql, char& continueYesNo)int e;cout << endl << endl;cout << "*查找第1個與e滿足compare()關(guān)系的

35、元素*" << endl<<endl;cout << "查找等于某個元素的操作" << endl;cout << "請輸入你想查找的元素:"cin >> e;cout << endl;/查找等于cout << "你想查找第一個等于" << e << "的元素序號為" << sql.locateElem(e, Gequal) << endl << end

36、l;/查找大于cout << "查找大于某個元素的操作" << endl;cout << "請輸入你想查找的元素:"cin >> e;cout << endl;sql.locateElem(e, great);cout << "你想查找第一個大于" << e << "的元素序號為" << sql.locateElem(e, great) << endl << endl;/查找小cout

37、 << "查找小于某個元素的操作" << endl;cout << "請輸入你想查找的元素:"cin >> e;cout << endl;sql.locateElem(e, Gless);cout << "你想查找第一個小于" << e << "的元素序號為" << sql.locateElem(e, Gless) << endl << endl;cout << "

38、;*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/返回某元素的前驅(qū)template<typename ElemType>void ex_3_7(MySqList<ElemType>& sql, char& continueYesNo)ElemType e;ElemType prior_e;cout << "*返回某元素的前驅(qū)*" << endl;c

39、out << "請輸入你想查找其前驅(qū)的元素:"cin >> e;cout << endl;cout << "你想查找的元素" << e << "的前驅(qū)為" << sql.priorElem(e, prior_e);cout << "*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueY

40、esNo;/返回某元素的后繼template<typename ElemType>void ex_3_8(MySqList<ElemType>& sql, char& continueYesNo)ElemType e;ElemType next_e;cout << "*返回某元素的后繼*" << endl;cout << "請輸入你想查找其后繼的元素:"cin >> e;cout << endl;cout << "你想查找的元素&qu

41、ot; << e << "的后繼為" << sql.nextElem(e, next_e);cout << "*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/刪除第i個元素template<typename ElemType>void ex_3_9(MySqList<ElemType>& sql, char& co

42、ntinueYesNo)ElemType e;int i;cout << sql; /輸出順序表cout << endl << endl;cout << "*刪除第i個元素*" << endl;cout << "請輸入你想刪除元素的序號(1-" <<sql.getLength()<< "):"cin >> i;cout << endl;cout << "你想刪除的第" <<

43、 i << "個元素的值為:" << sql.getLength() << endl;sql.deleteElem(i, e);cout << sql;cout << "*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/把一個順序表賦值給另一個順序表template<typename ElemType>void ex_3_10(My

44、SqList<ElemType>& sql, char& continueYesNo)cout << sql << endl;cout << "*把一個順序表賦值給另一個順序表*" << endl;MySqList<ElemType> otherL; /重新生成一個順序表otherL = sql;cout << "賦值后的順序表為:" << endl;cout << otherL<<endl;cout <<

45、"*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/把順序表置空template<typename ElemType>void ex_3_11(MySqList<ElemType>& sql, char& continueYesNo)sql.clear();cout << sql;cout << "*" << endl <

46、< endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/用已有的順序表初始化另一個順序表template<typename ElemType>void ex_3_12(MySqList<ElemType>& sql, char& continueYesNo)cout << "*用已有的順序表初始化另一個順序表*" << endl;MySqList<ElemType> otherL;cout &l

47、t;< "已有的順序表:" << endl;cout << sql;otherL = sql;cout << "現(xiàn)在的順序表:" << endl;cout << otherL;cout << "*" << endl << endl;cout << " 還繼續(xù)嗎(Y.繼續(xù)tN.結(jié)束)?"cin >> continueYesNo;/ myhead.h 包含自己設定的一些常量和類型/#includ

48、e <cassert>#include <new>using namespace std;#include <time.h>const intOK=1;const intERROR=0;const intINFEASIBLE=-1;const intOVERFLOWX=-2;typedef int Status;/表示操作結(jié)果的狀態(tài)/功能:判斷兩整數(shù)是否相等/輸入:函數(shù)的值參a和b為需要比較的兩個整數(shù)/輸出:若a等于b,函數(shù)的返回值為OK;否則為ERRORStatus Gequal(int a,int b)if(a=b)return OK;elseretur

49、n ERROR;/功能:判斷一個整數(shù)是否大于另一個整數(shù)/輸入:函數(shù)的值參a和b為需要比較的兩個整數(shù)/輸出:若a大于b,函數(shù)的返回值為OK;否則為ERRORStatus great(int a,int b)if(a>b)return OK;elsereturn ERROR;/功能:判斷一個整數(shù)是否小于另一個整數(shù)/輸入:函數(shù)的值參a和b為需要比較的兩個整數(shù)/輸出:若a小于b,函數(shù)的返回值為OK;否則為ERRORStatus Gless(int a,int b)if(a<b)return OK;elsereturn ERROR;/MySqList 順序表數(shù)據(jù)結(jié)構(gòu)C+類定義(派生類)/Sq

50、List.h順序表數(shù)據(jù)結(jié)構(gòu)C+類定義(基類)#ifndef SQLIST_H #define SQLIST_H #include "SqList.h"#endif#include<stdlib.h>#include<time.h>/順序表數(shù)據(jù)結(jié)構(gòu)C+類聲明(派生類)template <typename ElemType>class MySqList :public SqList<ElemType>public:/線性表隨機生成函數(shù)void Gsrand();/*類對象的輸入輸出函數(shù)*/輸出順序表void read(istrea

51、m& in);/輸出順序表void display(ostream& out) const;/順序表數(shù)據(jù)結(jié)構(gòu)C+類實現(xiàn)(派生類) /功能:生成隨機順序表 template <typename ElemType> void MySqList<ElemType>:Gsrand() srand(unsigned)time(NULL); listSize = rand() % 50 + 1; n = rand() % listSize + 1; for (int i = 0; i < n; i+) elemi = rand() % 90 + 10; / /

52、順序表的輸入 /功能:輸入順序表 /說明:輸入順序表 template <typename ElemType> void MySqList<ElemType>:read(istream& in) cout << "請輸入順序表" << endl; for (int i = 0; i < n; i+) in >> elemi; /功能:重載輸入運算符的定義 /說明:通過本函數(shù),可以使用C+中cin直接從鍵盤上輸入順序表 template <typename ElemType> istream& operator>>(istream& in, MySqList<ElemType>& i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論