動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第1頁
動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第2頁
動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第3頁
動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第4頁
動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上設(shè)計(jì)動(dòng)態(tài)數(shù)組的基本應(yīng)用與實(shí)現(xiàn)1.1需求陳述數(shù)組是應(yīng)用程序中經(jīng)常要用到的一種數(shù)據(jù)結(jié)構(gòu)。雖然通過數(shù)組可以對(duì)大量的數(shù)據(jù)和對(duì)象進(jìn)行有效的管理,但很多情況下,在程序運(yùn)行之前,并不能夠確切地知道數(shù)組中會(huì)有多少元素,這時(shí)候數(shù)組到底聲明為多大,就是一個(gè)很麻煩的問題。在C+中,動(dòng)態(tài)內(nèi)存分配技術(shù)可以保證程序在運(yùn)行過程中按照實(shí)際需要申請(qǐng)適量的內(nèi)存,使用結(jié)束后還可以釋放。這樣就使得在運(yùn)用數(shù)組時(shí)更加方便,有效。1.2需求分析1.2.1功能分析表1 函數(shù)庫功能分析項(xiàng)目功能函數(shù)Array主體函數(shù)主函數(shù):int main()運(yùn)行函數(shù):Array:run()數(shù)組的操作插入元素:Array:insert

2、(const int & index, const int & value)刪除元素:Array:remove(const int& index) 追加元素:Array:append(const int& value) 查看數(shù)組大?。篈rray:size()查看數(shù)組容量:Array:capacity()查看數(shù)組是否為空:Array:empty()類的函數(shù)構(gòu)造函數(shù):Array:Array(const int& capcity) :_size(0), _capacity(capcity)拷貝構(gòu)造函數(shù):Array:Array(const Array&

3、other) :_size(other._size), _capacity(other._capacity)析構(gòu)函數(shù):Array:Array()1.2.2數(shù)據(jù)分析數(shù)組最初默認(rèn)為空,并且容量為10。由于使用動(dòng)態(tài)內(nèi)存分配,所以在存入數(shù)據(jù)時(shí)不必?fù)?dān)心數(shù)組大小的影響,數(shù)組容量不夠時(shí)可以自動(dòng)分配新的內(nèi)存存儲(chǔ)數(shù)據(jù)。對(duì)數(shù)組進(jìn)行不同的操作時(shí),數(shù)組也會(huì)根據(jù)實(shí)際需要進(jìn)行動(dòng)態(tài)的內(nèi)存分配。這樣使得數(shù)組的應(yīng)用更加方便、靈活,同時(shí)提高了效率。為提高函數(shù)的可靠性,我們對(duì)每個(gè)函數(shù)的測(cè)試準(zhǔn)備了23套測(cè)試數(shù)據(jù)。1.2.3技術(shù)約束本函數(shù)庫的測(cè)試系統(tǒng)已在code blocks下編譯通過。1.3總體設(shè)計(jì)1.3.1 數(shù)據(jù)結(jié)構(gòu)數(shù)組所采用的數(shù)

4、據(jù)結(jié)構(gòu)是類。聲明一個(gè)數(shù)組類,在將對(duì)數(shù)組進(jìn)行的各項(xiàng)操作聲明為類的函數(shù),通過調(diào)用各個(gè)函數(shù)來實(shí)現(xiàn)對(duì)數(shù)組的各項(xiàng)操作功能。具體定義形式為:class Array int _size;/元素個(gè)數(shù) int _capacity;/容量 int* items;/動(dòng)態(tài)數(shù)組public: Array(const int& capcity = 16);/構(gòu)造函數(shù) Array(const Array& other);/拷貝構(gòu)造函數(shù) Array& operator = (const Array& other);/ Array();/析構(gòu)函數(shù) void insert(const int&am

5、p; index, const int& value);/插入函數(shù) void remove(const int& index);/刪除函數(shù) void append(const int& value);/追加函數(shù) void run();/運(yùn)行函數(shù);1.3.2 函數(shù)功能a. 主函數(shù)(選擇界面函數(shù)):int main()功能:使用戶來選擇要對(duì)數(shù)組進(jìn)行的操作。關(guān)鍵代碼: Array a(10);/聲明一個(gè)動(dòng)態(tài)數(shù)組類的對(duì)象 cout<<"*t"<<endl;cout<<"*請(qǐng)選擇你想對(duì)動(dòng)態(tài)數(shù)組的操作*tt"

6、;<<endl;cout<<" 1、插入元素 2、追加元素 3、查看數(shù)組大小 tt"<<endl;cout<<" 4、查看數(shù)組容量 5、刪除元素 6、顯示元素 tt"<<endl;cout<<"*t"<<endl;cout<<"提示:輸入0即可退出程序 t"<<endl;cout<<" 目前數(shù)組為空,建議追加元素后再進(jìn)行其他操作tt"<<endl;cout<&

7、lt;"*t"<<endl; a.run();測(cè)試數(shù)據(jù): 優(yōu)點(diǎn):讓用戶自己選擇需要進(jìn)行的操作,更加人性化。b. 插入元素函數(shù):Array:insert(const int & index, const int & value)設(shè)計(jì)思想:首先選擇要插入元素的位置,位置錯(cuò)誤則報(bào)錯(cuò);位置正確則進(jìn)行下一步判斷。如果數(shù)組容量可以繼續(xù)存放數(shù)據(jù),則把items + index所指向的內(nèi)存空間的數(shù)據(jù)全部拷貝到items + (index + 1)所指向的內(nèi)存地址上,然后把所要插入的元素賦值給所選擇的數(shù)組下標(biāo)位置tmpindex上,這樣完成元素插入過程。如果當(dāng)前數(shù)

8、組容量不能繼續(xù)存放數(shù)據(jù),則需要重新申請(qǐng)內(nèi)存用于存放數(shù)據(jù),然后完成元素插入。功能:把新元素插入數(shù)組中兩元素之間關(guān)鍵代碼: if (index < 0 | index >= _size )/如果輸入下標(biāo)位置小于零或大于等于元素個(gè)數(shù)則報(bào)錯(cuò) cout << "輸入位置不正確!"<<"t"<<endl; if (_size < _capacity) /如果當(dāng)前容量可以繼續(xù)存放元素 memmove(items + (index + 1), items + index, (_size - index) * size

9、of(int);/ itemsindex = value;/把要插入的元素存入所選位置 else _capacity *= 2;/容量不夠,再開辟同樣長(zhǎng)度內(nèi)存空間 int* tmp = new int_capacity; /用指針tmp指向new動(dòng)態(tài)分配的長(zhǎng)度為_capacity*sizeof(int)的內(nèi)存空間 memcpy(tmp, items, index * sizeof(int);/ memcpy(tmp + (index + 1), items + index, (_size - index)* sizeof(int);/ tmpindex = value;/把要插入的元素存入所選

10、位置 delete tmp;/注銷指針tmp,使程序釋放用new開辟的內(nèi)存空間 +_size;/插入一個(gè)元素所以元素個(gè)數(shù)加一測(cè)試數(shù)據(jù):優(yōu)點(diǎn):可以把想要存入數(shù)組的元素放入數(shù)組中任意位置(數(shù)組末尾除外)c.追加元素函數(shù):Array:append(const int & value)設(shè)計(jì)思想:首先判斷當(dāng)前數(shù)組容量是否可以繼續(xù)存放數(shù)據(jù),若可以,則直接將該元素存放于數(shù)組末尾,完成元素追加。若容量不夠,則需要繼續(xù)申請(qǐng)內(nèi)存空間,然后將該元素存于數(shù)組末尾即可。功能:把元素直接存放于數(shù)組末尾。關(guān)鍵代碼:if (_size < _capacity) /如果當(dāng)前容量可以繼續(xù)存放元素 items_siz

11、e = value;/直接把元素存入數(shù)組末尾 else _capacity *= 2;/容量不夠,再開辟同樣長(zhǎng)度內(nèi)存空間 int* tmp = new int_capacity;/用指針tmp指向new動(dòng)態(tài)分配的長(zhǎng)度為_capacity*sizeof(int)的內(nèi)存空間 memcpy(tmp, items, _size * sizeof(int);/ tmp_size = value;/直接把元素存入數(shù)組末尾 delete tmp;/注銷指針tmp,使程序釋放用new開辟的內(nèi)存空間 +_size;/追加一個(gè)元素所以元素個(gè)數(shù)加一測(cè)試數(shù)據(jù):d. 刪除元素函數(shù):Array:remove(const

12、int& index) 設(shè)計(jì)思想:首先判斷要?jiǎng)h除的元素位置是否正確,若不正確,則報(bào)錯(cuò)。若輸入正確,則精選下一步判斷。首先元素個(gè)數(shù)_size減一,判斷所選位置是否等于元素個(gè)數(shù)_size,即要?jiǎng)h除的元素是否為最后一位。若是,則直接將最后一位元素抹掉即可,若不是最后一位,則把items + (index + 1)所指向的內(nèi)存空間中的數(shù)據(jù)拷貝到items + index 所指向的內(nèi)存地址上,此時(shí)會(huì)將tmpindex元素覆蓋,即將其刪除。 功能:刪除數(shù)組中任意一個(gè)元素。 關(guān)鍵代碼: if (index < 0 | index >= _size)/如果輸入的下標(biāo)位置小于零或大于元素個(gè)數(shù)

13、則 cout << "輸入位置不正確!"<<"t"<<endl;/輸出錯(cuò)誤 -_size;/如果輸入正確則元素個(gè)數(shù)減一 if (index != _size)/ memmove(items + index, items + (index + 1), (_size - index) * sizeof(int);/測(cè)試數(shù)據(jù):優(yōu)點(diǎn):可以刪除不想要的元素。e.查看數(shù)組大小函數(shù) :Array:size() 設(shè)計(jì)思想:直接返回?cái)?shù)組中的元素個(gè)數(shù)即可。功能:查看數(shù)組中的元素個(gè)數(shù)。關(guān)鍵代碼:return _size;測(cè)試數(shù)據(jù):優(yōu)點(diǎn):可以

14、查看數(shù)組中元素個(gè)數(shù)。f.查看數(shù)組容量函數(shù):Array:capacity() 設(shè)計(jì)思想:數(shù)組一開始默認(rèn)容量_capacity為10,當(dāng)容量不夠時(shí)會(huì)自動(dòng)申請(qǐng)同長(zhǎng)內(nèi)存空間。直接返回_capacity即可。功能:查看數(shù)組容量。關(guān)鍵代碼:return _capacity; 測(cè)試數(shù)據(jù):1.初始數(shù)組容量:2.申請(qǐng)內(nèi)存空間后:優(yōu)點(diǎn):可以準(zhǔn)確查看數(shù)組容量變化。g. 運(yùn)行函數(shù):Array:run()設(shè)計(jì)思想:由用戶根據(jù)選擇界面選擇要進(jìn)行的操作,函數(shù)根據(jù)switch結(jié)構(gòu)來調(diào)用上述幾個(gè)函數(shù)實(shí)現(xiàn)其功能。功能:調(diào)用各個(gè)函數(shù)以實(shí)現(xiàn)操作功能。關(guān)鍵代碼:char key;int i ,num,value;/num是下標(biāo)位置變量

15、,value是元素值變量cout << "請(qǐng)輸入你的選擇:"<<"t"<<endl;cin >> key;while(key!='0')switch(key)case '1':/插入元素 if(_size < 1)/如果數(shù)組為空則顯示無法插入 cout<<"目前數(shù)組無法插入元素!tt"<<"t"<<endl; break; elsecout<<"請(qǐng)輸入插入元素的位置:t&q

16、uot;<<endl;cin>>num;if(num > _size-1)/如果輸入的位置不存在 cout<<"您輸入的位置無法插入元素!tt"<<"t"<<endl; break; else cout<<"請(qǐng)輸入插入元素的值:t"<<endl; cin>> value; insert(num, value);/執(zhí)行插入函數(shù) break; case '2':/追加元素cout<<"請(qǐng)輸入追加元素的

17、值:t"<<endl;cin >> value;append(value);/執(zhí)行追加函數(shù)break;case '3':/查看數(shù)組大小cout<<"動(dòng)態(tài)數(shù)組的大小為:t"<<size()<<endl;/執(zhí)行查看數(shù)組大小函數(shù)break;case '4':/查看數(shù)組容量cout<<"動(dòng)態(tài)數(shù)組的容量為:t"<<capacity()<<endl;/執(zhí)行查看數(shù)組容量函數(shù)break;case '5':/刪除元素 i

18、f(_size < 1)/如果數(shù)組為空 cout<<"目前數(shù)組無法刪除元素!tt"<<"t"<<endl; break; elsecout<<"請(qǐng)輸入你想刪除的元素的位置:t"<<endl;cin>>num;if(num > _size-1)/如果輸入的位置不存在 cout<<"您輸入的位置為空白,無法刪除!tt"<<"t"<<endl; break; elseremove(num);/執(zhí)行刪除元素函數(shù)break; case '6': if(_size < 1)/如果數(shù)組為空 cout<<"目前數(shù)組為空,無法顯示!"<<"t"<<endl; else cout<<"目前數(shù)組元素為:"<<e

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論