實驗三 順序佇列與鏈佇列
阿新 • • 發佈:2019-01-29
一、實驗目的
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 Queuesize=100; class Cirqueue { public: Cirqueue(){front=rear=Queuesize-1;} ~Cirqueue(){} void Enqueue(int x); int Dequeue(); int Getqueue(); int Empty(){if(front=rear)return 1;return 0;} private: int data[Queuesize]; int front,rear; }; void Cirqueue::Enqueue(int x) { if((rear+1)%Queuesize==front) throw"上溢"; rear=(rear+1)%Queuesize; data[rear]=x; } int Cirqueue::Dequeue() { if(rear==front)throw"下溢"; front=(front+1)%Queuesize; return data[front]; } int Cirqueue::Getqueue() { int i; if (rear==front)throw"下溢"; i=(front+1)%Queuesize; return data[i]; } int main() { Cirqueue a; int b,n,x; cout<<"請輸入您想輸入數的個數為:"; cin>>n; cout<<"請輸入一組數:"; for(int i=0;i<n;i++) { cin>>x; a.Enqueue(x); } cout<<"請輸入您想彈出數的個數:"<<endl; cin>>b; cout<<"結果如下:"; for(int p=n;p>n-b;p--) cout<<a.Dequeue()<<endl; return 0; }
結果:
2.鏈佇列
#include<iostream> using namespace std; struct Node { int data; Node *next; }; class LinkQueue { public: LinkQueue(); ~LinkQueue(){}; void Enqueue(int x); int Dequeue(); int Getqueue(); int Empty(){ if(front==rear) return 1; else return 0; } private: Node *front,*rear; }; LinkQueue::LinkQueue() { Node *s; s=new Node; s->next=NULL; front=rear=s; } void LinkQueue::Enqueue(int x) { Node *s; s=new Node; s->data=x; s->next=NULL; rear->next=s; rear=s; } int LinkQueue::Dequeue() { Node *p; int x; if(rear==front) throw "下溢"; p=front->next;x=p->data; front->next=p->next; if(p->next==NULL)rear=front; delete p; return x; } int LinkQueue::Getqueue() { int x; Node *p; if(rear==front) throw"下溢"; p=front->next;x=p->data; return x; } int main() { LinkQueue a; int b,n,x; cout<<"請輸入您想輸入數的個數為:"; cin>>n; cout<<"請輸入一組數:"; for(int i=0;i<n;i++) { cin>>x; a.Enqueue(x); } cout<<"請輸入您想彈出數的個數:"<<endl; cin>>b; cout<<"結果如下:"; for(int p=n;p>n-b;p--) cout<<a.Dequeue()<<endl; return 0; }
結果:
六、心得體會
理解了佇列的結構限制,在實驗中蹦出很多想法來操作佇列。需要更加細心緊密的思維去理解佇列和棧才能說上手。