版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+程序設(shè)計實驗報告姓名:庹磊學(xué)院:計算機智能科學(xué)類班級:0401310學(xué)號:2013211732時間:2014-2015(2)指導(dǎo)教師:馮瀟1題目:(類模板的使用)實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu),功能可以包括入棧、出棧、清空棧等動作。2思路:堆棧的定義設(shè)計template <class Type>class seqstackpublic: seqstack(); /創(chuàng)建一個空棧 seqstack(int size); /創(chuàng)建一個可以容納size個元素的棧 seqstack(); /析構(gòu)函數(shù) bool create(int size); /實際創(chuàng)建一個可以容納size個元素的棧 void dest
2、roy(); /棧的銷毀 bool isempty() const; /確定棧是否為空 bool isfull() const; /確定棧是否已滿 bool push(Type &item); /數(shù)據(jù)進棧 bool pop(); /數(shù)據(jù)出棧 bool pop(Type &item); /數(shù)據(jù)出棧,并返回出棧前的棧頂數(shù)據(jù) bool gettop(Type &item); /顯示當(dāng)前棧頂元素 void display(); /顯示所有數(shù)據(jù)元素private: Type *stackspace; /指向棧的指針 int stacksize; /棧的大小,當(dāng)為0時,表示棧沒有創(chuàng)
3、建空間 int top; /top棧頂位置,當(dāng)為-1時,棧為空;功能實現(xiàn)代碼/棧的初始化template<class Type> /此語句關(guān)鍵,需注意seqstack<Type>:seqstack() stackspace=NULL; stacksize=0; top=-1;/創(chuàng)建一個空棧template<class Type>seqstack<Type>:seqstack(int size) stackspace=NULL; stacksize=0; top=-1; create(size);/棧的析構(gòu)函數(shù)template<class T
4、ype>seqstack<Type>:seqstack() destroy();/實際棧的創(chuàng)建函數(shù)template<class Type>bool seqstack<Type>:create(int size) if(stacksize) /棧已經(jīng)創(chuàng)建,不能繼續(xù)創(chuàng)建 return false; if(size<=0) /size的值必須大于0 return false; stackspace=new Typesize; if(!stackspace) /沒有申請到存儲空間(棧已滿) return false; stacksize=size; to
5、p=-1; return true;/銷毀棧的函數(shù)template<class Type>void seqstack<Type>:destroy() if(stackspace) delete stackspace; stackspace=NULL; top=-1; stacksize=0;/判斷棧是否為空template<class Type>bool seqstack<Type>:isempty() const if(!stackspace) return true; return top>=0?false:true;/判斷棧是否已滿t
6、emplate<class Type>bool seqstack<Type>:isfull() const if(!stacksize) /確定棧是否被創(chuàng)建,沒有創(chuàng)建是為已滿 return true; return top=stacksize-1?true:false;/進棧函數(shù)template<class Type>bool seqstack<Type>:push(Type &item) if(!stackspace) return false; if(isfull() return false; stackspace+top=item
7、; return true;/出棧函數(shù),不返回棧頂元素template<class Type>bool seqstack<Type>:pop() if(empty() return flase; top-; return ture;/出棧函數(shù),但返回棧頂元素template<class Type>bool seqstack<Type>:pop(Type &item) if(isempty() /判斷棧是否為空 return false; item=stackspacetop-; return true;/得到棧頂數(shù)據(jù)元素template&
8、lt;class Type>bool seqstack<Type>:gettop(Type &item) if(isempty() return false; item=stackspacetop; return true;/顯示所有數(shù)據(jù)元素template<class Type>void seqstack<Type>:display() if(stacksize) cout<<"目前棧的所有的數(shù)據(jù)元素為: " cout<<"棧底是: " for(int i=0;i<=top
9、;i+) cout<<stackspacei<<" " cout<<"棧頂"<<endl; else cout<<"棧尚未建立!"<<endl;主程序void main() seqstack<int> stacknow;/若想輸入字符,將此語句中的int改為char即可 char yesno,userchoice='9' int newstacksize,datain,dataout; while(1) if(userchoice=
10、39;9') system("cls"); cout<<"="<<endl <<"順序棧的基本操作程序"<<endl <<"="<<endl <<"1:創(chuàng)建一個棧"<<endl <<"2:銷毀一個棧"<<endl <<"3:數(shù)據(jù)進棧"<<endl <<"4:數(shù)據(jù)出棧"<
11、<endl <<"5:顯示所有數(shù)據(jù)元素"<<endl <<"6:讀取棧底元素"<<endl <<"7:判斷棧是否為空"<<endl <<"8:判斷棧是否已滿"<<endl <<"9:清屏"<<endl <<"0:退出程序"<<endl; cout<<"="<<endl <<
12、"請輸入你的選擇: "<<endl; cin>>userchoice; if(userchoice='0') cout<<"程序已經(jīng)退出,感謝你的使用!"<<endl; exit(0); switch(userchoice) case'1': cout<<"開始創(chuàng)建棧,請輸入棧的空間大小 " cin>>newstacksize; if(stacknow.create(newstacksize) cout<<"創(chuàng)
13、建成功,棧的大小是: "<<newstacksize<<endl; else /考慮要全面 cout<<"創(chuàng)建失敗!"<<endl; break; case'2': cout<<"你確定要銷毀一個棧嗎?(若銷毀請輸入輸入(Y/y)" cin>>yesno; if(yesno='Y'|yesno='y') stacknow.destroy(); cout<<"棧已被銷毀!"<<endl
14、; break; case'3': cout<<"請輸入要入棧數(shù)據(jù): " cin>>datain; if(stacknow.push(datain) cout<<"數(shù)據(jù) "<<datain<<"已經(jīng)入棧成功!"<<endl; stacknow.display(); else cout<<"數(shù)據(jù) "<<datain<<"進棧失敗!"<<endl; break; c
15、ase'4': if(stacknow.pop(dataout) cout<<"從棧中成功出棧的數(shù)據(jù)為: "<<dataout<<endl; stacknow.display(); else cout<<"出棧失敗!"<<endl; break; case'5': stacknow.display(); break; case'6': if(stacknow.gettop(dataout) cout<<"棧頂元素為 "
16、;<<dataout<<endl; stacknow.display(); else cout<<"獲取棧頂元素失敗!"<<endl; break; case'7': if(stacknow.isempty() cout<<"目前是空?;蛘呤菞I形唇?"<<endl; else cout<<"目前棧非空!"<<endl; break; case'8': if(stacknow.isfull() cout&l
17、t;<"目前棧滿或者棧尚未建立!"<<endl; else cout<<"目前棧不滿,還可以繼續(xù)輸入數(shù)據(jù)進棧!"<<endl; break; case'9': break; default: cout<<"輸入數(shù)據(jù)有誤!"<<endl; break; 4調(diào)試過程:5最終程序代碼#include<iostream.h>#include<conio.h>#include<string.h>#include<stdli
18、b.h>/基于類模板的設(shè)計template <class Type>class seqstackpublic: seqstack(); /創(chuàng)建一個空棧 seqstack(int size); /創(chuàng)建一個可以容納size個元素的棧 seqstack(); /析構(gòu)函數(shù) bool create(int size); /實際創(chuàng)建一個可以容納size個元素的棧 void destroy(); /棧的銷毀 bool isempty() const; /確定棧是否為空 bool isfull() const; /確定棧是否已滿 bool push(Type &item); /數(shù)據(jù)進
19、棧 bool pop(); /數(shù)據(jù)出棧 bool pop(Type &item); /數(shù)據(jù)出棧,并返回出棧前的棧頂數(shù)據(jù) bool gettop(Type &item); /顯示當(dāng)前棧頂元素 void display(); /顯示所有數(shù)據(jù)元素private: Type *stackspace; /指向棧的指針 int stacksize; /棧的大小,當(dāng)為0時,表示棧沒有創(chuàng)建空間 int top; /top棧頂位置,當(dāng)為-1時,棧為空;/棧的初始化template<class Type> /此語句關(guān)鍵,需注意seqstack<Type>:seqstack(
20、) stackspace=NULL; stacksize=0; top=-1;/創(chuàng)建一個空棧template<class Type>seqstack<Type>:seqstack(int size) stackspace=NULL; stacksize=0; top=-1; create(size);/棧的析構(gòu)函數(shù)template<class Type>seqstack<Type>:seqstack() destroy();/實際棧的創(chuàng)建函數(shù)template<class Type>bool seqstack<Type>:c
21、reate(int size) if(stacksize) /棧已經(jīng)創(chuàng)建,不能繼續(xù)創(chuàng)建 return false; if(size<=0) /size的值必須大于0 return false; stackspace=new Typesize; if(!stackspace) /沒有申請到存儲空間(棧已滿) return false; stacksize=size; top=-1; return true;/銷毀棧的函數(shù)template<class Type>void seqstack<Type>:destroy() if(stackspace) delete st
22、ackspace; stackspace=NULL; top=-1; stacksize=0;/判斷棧是否為空template<class Type>bool seqstack<Type>:isempty() const if(!stackspace) return true; return top>=0?false:true;/判斷棧是否已滿template<class Type>bool seqstack<Type>:isfull() const if(!stacksize) /確定棧是否被創(chuàng)建,沒有創(chuàng)建是為已滿 return true
23、; return top=stacksize-1?true:false;/進棧函數(shù)template<class Type>bool seqstack<Type>:push(Type &item) if(!stackspace) return false; if(isfull() return false; stackspace+top=item; return true;/出棧函數(shù),不返回棧頂元素template<class Type>bool seqstack<Type>:pop() if(empty() return flase; t
24、op-; return ture;/出棧函數(shù),但返回棧頂元素template<class Type>bool seqstack<Type>:pop(Type &item) if(isempty() /判斷棧是否為空 return false; item=stackspacetop-; return true;/得到棧頂數(shù)據(jù)元素template<class Type>bool seqstack<Type>:gettop(Type &item) if(isempty() return false; item=stackspacetop
25、; return true;/顯示所有數(shù)據(jù)元素template<class Type>void seqstack<Type>:display() if(stacksize) cout<<"目前棧的所有的數(shù)據(jù)元素為: " cout<<"棧底是: " for(int i=0;i<=top;i+) cout<<stackspacei<<" " cout<<"棧頂"<<endl; else cout<<&quo
26、t;棧尚未建立!"<<endl;/主程序void main() seqstack<int> stacknow;/若想輸入字符,將此語句中的int改為char即可 char yesno,userchoice='9' int newstacksize,datain,dataout; while(1) if(userchoice='9') system("cls"); cout<<"="<<endl <<"順序棧的基本操作程序"<&l
27、t;endl <<"="<<endl <<"1:創(chuàng)建一個棧"<<endl <<"2:銷毀一個棧"<<endl <<"3:數(shù)據(jù)進棧"<<endl <<"4:數(shù)據(jù)出棧"<<endl <<"5:顯示所有數(shù)據(jù)元素"<<endl <<"6:讀取棧底元素"<<endl <<"7:判
28、斷棧是否為空"<<endl <<"8:判斷棧是否已滿"<<endl <<"9:清屏"<<endl <<"0:退出程序"<<endl; cout<<"="<<endl <<"請輸入你的選擇: "<<endl; cin>>userchoice; if(userchoice='0') cout<<"程序已經(jīng)退出,
29、感謝你的使用!"<<endl; exit(0); switch(userchoice) case'1': cout<<"開始創(chuàng)建棧,請輸入棧的空間大小 " cin>>newstacksize; if(stacknow.create(newstacksize) cout<<"創(chuàng)建成功,棧的大小是: "<<newstacksize<<endl; else /考慮要全面 cout<<"創(chuàng)建失敗!"<<endl; brea
30、k; case'2': cout<<"你確定要銷毀一個棧嗎?(若銷毀請輸入輸入(Y/y)" cin>>yesno; if(yesno='Y'|yesno='y') stacknow.destroy(); cout<<"棧已被銷毀!"<<endl; break; case'3': cout<<"請輸入要入棧數(shù)據(jù): " cin>>datain; if(stacknow.push(datain) cout<<"數(shù)據(jù) "<<datain<<&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年魚池水產(chǎn)養(yǎng)殖租賃3篇
- 2024年生物技術(shù)數(shù)據(jù)保密與產(chǎn)學(xué)研合作協(xié)議3篇
- 2024年砂石供應(yīng)商合同模板
- 2025年EPS線條新型保溫材料采購協(xié)議3篇
- 2024版機票改簽預(yù)訂協(xié)議3篇
- 2024年版權(quán)保護音樂出版合同
- 2024年跨境電商物流服務(wù)
- 2024年船舶買賣標(biāo)準(zhǔn)協(xié)議樣本版B版
- 2024年魚塘承包養(yǎng)殖生產(chǎn)資料租賃合同3篇
- 2024輕鋼別墅工程保險合同
- 2025年國家計算機網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心省級分中心招聘39人歷年高頻重點提升(共500題)附帶答案詳解
- 上海市2024年中考英語試題及答案
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之21:“7支持-7.5成文信息”(雷澤佳編制-2025B0)
- 2023-2024年電商直播行業(yè)現(xiàn)狀及發(fā)展趨勢研究報告
- 中央2024年市場監(jiān)管總局直屬事業(yè)單位招聘中層干部歷年參考題庫(頻考版)含答案解析
- 阜陽市重點中學(xué)2025屆高考數(shù)學(xué)全真模擬密押卷含解析
- 2024年市特殊教育學(xué)校工作總結(jié)范文(2篇)
- LNG采購框架合同范例
- 2024版機床維護保養(yǎng)服務(wù)合同3篇
- 課題1 金屬材料 教學(xué)設(shè)計 九年級化學(xué)下冊人教版2024
- 能源崗位招聘筆試題與參考答案(某大型國企)
評論
0/150
提交評論