實驗3:棧和佇列的基本操作實現及其應用——順序佇列和鏈佇列
阿新 • • 發佈:2019-01-29
實驗3:棧和佇列的基本操作實現及其應用
一、實驗目的
1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。
2、 學會使用棧和佇列解決實際問題。
二、實驗內容
1、自己確定結點的具體資料型別和問題規模:
分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。
分別建立一個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。
2、設計演算法並寫出程式碼,實現一個十將二進位制轉換成2進位制數。
3、選做題(*)
設計一個模擬飯堂排隊打飯管理軟體,實現“先來先打飯”的排號叫號管理。
三、實驗步驟
1、依據實驗內容分別說明實驗程式中用到的資料型別的定義;
2、相關操作的演算法表達;
3、完整程式;
4、總結、執行結果和分析。
5、總體收穫和不足,疑問等。
四、實驗要求
1、 按照資料結構實驗任務書,提前做好實驗預習與準備工作。
2、 加“*”為選做題。做好可加分。
3、 嚴格按照資料結構實驗報告模板和規範,及時完成實驗報告。
4、 在個人主頁上發文章提交作業。
5、 實驗課會抽查3-5人,希望你可以被查到!
順序佇列和鏈佇列
1、順序佇列標頭檔案:#include<iostream>
using namespace std;
Cirqueue類:class Cirqueue { private: int data[Size]; int front,rear; public: Cirqueue(){front = rear = Size-1;} ~Cirqueue(){} void Enqueue(int a[],int n); void Dequeue(); };
入隊函式:
void Cirqueue::Enqueue(int a[],int n)
{
for(int i=0;i<n;i++)
{
rear = (rear+1)%Size;
data[rear] = a[i];
};
}
出隊函式:void Cirqueue::Dequeue() { while(front!=rear) { front = (front+1)%Size; cout<<data[front]<<endl; } }
主函式:
void main()
{
Cirqueue a;
int number[8] = {0,1,2,3,4,5,6,7};
a.Enqueue(number,8);
a.Dequeue();
}
2、鏈佇列標頭檔案:
#include<iostream>
using namespace std;
Node結構體:
struct Node
{
int data;
Node * next;
};
static Node *front,*rear;
入隊函式:
void Enqueue(int a[],int n)
{
Node * s = NULL;
s = new Node;
front = rear=s;
for(int i=0;i<n;i++)
{
s = new Node;
s->data = a[i];
s->next = NULL;
rear->next = s;
rear = s;
};
}
出隊函式:
void Dequeue()
{
while(front->next != NULL)
{
Node * p = front->next;
cout<<p->data<<endl;
front->next = p->next;
delete p;
}
}
主函式:
void main()
{
int number[8] = {0,1,2,3,4,5,6,7};
Enqueue(number,8);
Dequeue();
}
3、實驗結果(以上兩個結果相同)