1. 程式人生 > >實驗3:棧和佇列的基本操作實現及其應用——順序佇列和鏈佇列

實驗3:棧和佇列的基本操作實現及其應用——順序佇列和鏈佇列

實驗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、實驗結果(以上兩個結果相同)