實驗4:棧和佇列的基本操作實現及其應用——鏈棧
阿新 • • 發佈:2019-01-09
一、實驗目的
1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。
2、 學會使用棧和佇列解決實際問題。
二、實驗內容
1、自己確定結點的具體資料型別和問題規模:
分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。
分別建立一個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。
2、設計演算法並寫出程式碼,實現一個十將二進位制轉換成2進位制數。
3、選做題(*)
設計一個模擬飯堂排隊打飯管理軟體,實現“先來先打飯”的排號叫號管理。
三、實驗步驟
1、依據實驗內容分別說明實驗程式中用到的資料型別的定義;
2、相關操作的演算法表達;
3、完整程式;
4、總結、執行結果和分析。
5、總體收穫和不足,疑問等。
四、實驗要求
1、 按照資料結構實驗任務書,提前做好實驗預習與準備工作。
2、 加“*”為選做題。做好可加分。
3、 嚴格按照資料結構實驗報告模板和規範,及時完成實驗報告。
4、 在個人主頁上發文章提交作業。
5、 實驗課會抽查3-5人,希望你可以被查到!
原始碼如下:
#include<iostream> using namespace std; struct Node{ int data; Node*next; }; const int StackSize=10; class LinkStack { public: LinkStack(){top=NULL;} ~LinkStack(); void Push(); int Pop(); int GetTop() { if(top!=NULL) return top->data; }; int Empty(){ if(top==NULL) return 1; else return 0; } private: Node*top; }; void LinkStack::Push() { int x; Node*s; s=new Node;s->data=x; //申請一個數據域為x的結點s s->next=top;top=s; //將結點s插在棧頂 } int LinkStack::Pop() { int x; Node*p; if(top==NULL)throw"下溢"; x=top->data; p=top; top=top->next; delete p; return x; } LinkStack::~LinkStack() { while(top!=NULL) { Node *q; q=top; top=top->next; delete q; } } int main() { int m,i; LinkStack s; do { cout<<"請輸入入棧資料:"<<endl; cin>>m; cout<<"如果繼續輸入資料,請輸入1;如果結束,請輸入0:"; cin>>i; s.Push(); } while(i); cout<<"出棧資料為:"<<s.Pop()<<endl; cout<<"棧頂資料為:"<<s.GetTop()<<endl; cout<<"棧空輸出1,非棧空輸出0:"<<s.Empty()<<endl; return 0; }
未修改前的結果:
修改後的結果: