1. 程式人生 > >實驗三 順序棧和鏈棧

實驗三 順序棧和鏈棧

一、實驗目的

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;
}

結果:


六、心得體會

     對於棧的結構有更深刻的感受,同時熟悉了對棧的操作。但是仍有很多問題出現,例如書寫規範問題,讓我花了較多時間去查詢問題所在。