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

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

一、實驗目的

1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。

2、      學會使用棧和佇列解決實際問題。

二、實驗內容

1、自己確定結點的具體資料型別和問題規模:

分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。

分別建立一個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。

2、設計演算法並寫出程式碼,實現一個十將二進位制轉換成2進位制數。

3、選做題(*

設計一個模擬飯堂排隊打飯管理軟體,實現“先來先打飯”的排號叫號管理。

三、實驗步驟

1、依據實驗內容分別說明實驗程式中用到的資料型別的定義;

2、相關操作的演算法表達;

3、完整程式;

4、總結、執行結果和分析。

5、總體收穫和不足,疑問等。

四、實驗要求

1、   按照資料結構實驗任務書,提前做好實驗預習與準備工作。

2、   加“*”為選做題。做好可加分。

3、   嚴格按照資料結構實驗報告模板和規範,及時完成實驗報告。

4、   在個人主頁上發文章提交作業。

5、   實驗課會抽查3-5人,希望你可以被查到!

原始碼如下:

#include<iostream>
using namespace std;

struct Node{
	int data;
	Node*next;
};

const int StackSize=10;
class LinkStack
{
	public:
		LinkStack(){top=NULL;}
		~LinkStack();
		void Push();
		int Pop();
		int GetTop()
		{
		if(top!=NULL)
		return top->data;
		};
		int Empty(){
		if(top==NULL)
		return 1;
		else return 0;
		}
	private:
		Node*top;
};

void LinkStack::Push()
{
	int x;
	Node*s;
	s=new Node;s->data=x;  //申請一個數據域為x的結點s 
	s->next=top;top=s;       //將結點s插在棧頂 
}


int LinkStack::Pop()
{
	int x;
	Node*p;
	if(top==NULL)throw"下溢";
	x=top->data;
	p=top;
	top=top->next;
	delete p;
	return x; 
} 

LinkStack::~LinkStack()
{
	while(top!=NULL)
	{   
	    Node *q;
		q=top;
		top=top->next;
		delete q;
	}  
}
int main()
{
	int m,i;
	LinkStack s;

	do
	{
		cout<<"請輸入入棧資料:"<<endl;
		cin>>m; 
		cout<<"如果繼續輸入資料,請輸入1;如果結束,請輸入0:";
		cin>>i;
		s.Push();
	}
	while(i);
	cout<<"出棧資料為:"<<s.Pop()<<endl;
	cout<<"棧頂資料為:"<<s.GetTop()<<endl; 
	cout<<"棧空輸出1,非棧空輸出0:"<<s.Empty()<<endl;
	return 0;
}

未修改前的結果:



修改後的結果: