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; 

Conversion類:
const int Size = 50;   
class Conversion  
{  
private:   
    int data[Size];  
    int top;  
public:  
    Conversion(){top=-1;}  
    ~Conversion(){}  
    void Push(int a[],int n);  
    void Pop();  
};  
壓棧函式:
void Conversion::Push(int a[],int n)  
{    
	top=-1; 
	if(top==Size-1) throw "上溢";
	for(int i=0;i<n;i++)  
    {  
	    data[++top]= a[i]; 
    };
}   

出棧函式:
void Conversion::Pop()  
{  
    if (top == -1) throw "下溢";  
    while(top!=-1)  
    {  
    int x=data[top--];  
    cout<<x<<endl;  
    }  
} 

主函式:
void main()  
{   
    Conversion a;
    int number[8] = {0,1,2,3,4,5,6,7}; 
    a.Push(number,8);  
    a.Pop(); 
} 

2、鏈棧標頭檔案:
#include<iostream>  
using namespace std;

Node結構體:
struct Node
{
	int data;
	Node * next;
}; 
static Node * top;

壓棧函式:
void Push(int a[],int n)  
{   
	top = new Node;
	top->next = NULL;
	Node * s = NULL;
    for(int i=0;i<n;i++)  
    {  
	s = new Node;
	s->data = a[i];
	s->next = top;
	top = s;	 
    }; 
}   

出棧函式:
void Pop()  
{
	while(top->next!=NULL)
	{
		Node * p = top;
        cout<<top->data<<endl; 
        top = top->next;
		delete p;
	}
} 

主函式:
void main()  
{  
    int number[8] = {0,1,2,3,4,5,6,7}; 
    Push(number,8);  
    Pop(); 
}  

3、實驗結果(以上兩個都一樣)