棧類模板實現(xiàn)含界面_第1頁
棧類模板實現(xiàn)含界面_第2頁
棧類模板實現(xiàn)含界面_第3頁
棧類模板實現(xiàn)含界面_第4頁
棧類模板實現(xiàn)含界面_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論