實驗三 順序棧和鏈棧
阿新 • • 發佈:2019-02-11
一、實驗目的
1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。
2、 學會使用棧和佇列解決實際問題。
二、實驗內容
1、自己確定結點的具體資料型別和問題規模:
分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。
分別建立一個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。
2、設計演算法並寫出程式碼,實現一個十將二進位制轉換成2進位制數。
3、選做題(*)
設計一個模擬飯堂排隊打飯管理軟體,實現“先來先打飯”的排號叫號管理。
三、實驗步驟
1、依據實驗內容分別說明實驗程式中用到的資料型別的定義;
2、相關操作的演算法表達;
3、完整程式;
4、總結、執行結果和分析。
5、總體收穫和不足,疑問等。
四、實驗要求
1、 按照資料結構實驗任務書,提前做好實驗預習與準備工作。
2、 加“*”為選做題。做好可加分。
3、 嚴格按照資料結構實驗報告模板和規範,及時完成實驗報告。
4、 在個人主頁上發文章提交作業。
5、 實驗課會抽查3-5人,希望你可以被查到!
五、實驗
1.順序棧
#include<iostream> using namespace std; const int Max=20; class SeqStack { public: SeqStack(){top=-1;} ~SeqStack(){} void Push(int x); void Pop(); int GetTop(){if(top!=-1)return data[top];} int Empty(){if(top=-1)return 1; else return 0;} private: int data[Max]; int top; }; void SeqStack::Push(int x) { if(top==Max-1)throw"上溢"; data[++top]=x; } void SeqStack::Pop() { int x; if(top==-1)throw"下溢"; x=data[top--]; cout<<x<<endl; } int main() { SeqStack a; int n,x; cout<<"請輸入您想輸入數的個數為:"; cin>>n; if(n>Max) throw"上溢"; cout<<"請輸入一組數:"; for(int i=0;i<n;i++) { cin>>x; a.Push(x); } cout<<"出棧結果如下:"; a.Pop(); return 0; }
結果:
2.鏈棧
#include<iostream> using namespace std; struct Node { int data; Node *next; }; class LinkStack { public: LinkStack(){top=NULL;} ~LinkStack(){} void Push(int x); int Pop(); int GetTop(){if(top!=NULL)return top->data;} int Empty(){if(top=NULL)return 1;return 0;} private: Node *top; }; void LinkStack::Push(int x) { Node *s; s=new Node; s->data=x; s->next=top; top=s; } int LinkStack::Pop() { Node *p; int x; if(top==NULL)throw"down"; x=top->data; p=top; top=top->next; delete p; return x; } int main() { LinkStack a; int b,n,x; cout<<"請輸入您想輸入數的個數為:"; cin>>n; cout<<"請輸入一組數:"; for(int i=0;i<n;i++) { cin>>x; a.Push(x); } cout<<"請輸入您想彈出數的個數:"<<endl; cin>>b; cout<<"結果如下:"; for(int p=n;p>n-b;p--) cout<<a.Pop()<<endl; return 0; }
結果:
六、心得體會
對於棧的結構有更深刻的感受,同時熟悉了對棧的操作。但是仍有很多問題出現,例如書寫規範問題,讓我花了較多時間去查詢問題所在。