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 Queuesize=100;
class Cirqueue
{
	public:
		Cirqueue(){front=rear=Queuesize-1;}
		~Cirqueue(){}
		void Enqueue(int x);
		int Dequeue();
		int Getqueue();
		int  Empty(){if(front=rear)return 1;return 0;}
	private:
		int data[Queuesize];
		int front,rear;
};

void Cirqueue::Enqueue(int x)
{
	if((rear+1)%Queuesize==front) throw"上溢";
	rear=(rear+1)%Queuesize;
	data[rear]=x;
}

int Cirqueue::Dequeue()
{
	if(rear==front)throw"下溢";
	front=(front+1)%Queuesize;
	return data[front];
}

int Cirqueue::Getqueue()
{
	int i;
	if (rear==front)throw"下溢";
	i=(front+1)%Queuesize;
	return data[i];
}

int main()
{
    Cirqueue a;
	int b,n,x;
	cout<<"請輸入您想輸入數的個數為:";
	cin>>n;
	cout<<"請輸入一組數:";
	for(int i=0;i<n;i++)
	{
		cin>>x;
		a.Enqueue(x);
	}
    cout<<"請輸入您想彈出數的個數:"<<endl;
	cin>>b;
	cout<<"結果如下:";
	for(int p=n;p>n-b;p--)
	cout<<a.Dequeue()<<endl;
    return 0;
}

結果:


2.鏈佇列

#include<iostream>
using namespace std;
struct Node
{
	int data;
	Node *next;
};

class LinkQueue
{
	public:
		LinkQueue();
		~LinkQueue(){};
		void Enqueue(int x);
		int Dequeue();
		int Getqueue();
		int Empty(){
			if(front==rear)
	return 1;
	else 
	return 0;
		}
	private:
		Node *front,*rear;
};


LinkQueue::LinkQueue()
{
	Node *s;
	s=new Node;
	s->next=NULL;
	front=rear=s;
}

void LinkQueue::Enqueue(int x)
{
	Node *s;
	s=new Node;
	s->data=x;
	s->next=NULL;
	rear->next=s;
	rear=s;
}


int LinkQueue::Dequeue()
{
	Node *p;
	int x;
	if(rear==front) throw "下溢";
	p=front->next;x=p->data;
	front->next=p->next;
	if(p->next==NULL)rear=front;
	delete p;
	return x;
}

int LinkQueue::Getqueue()
{
	int x;
	Node *p;
	if(rear==front) throw"下溢";
	p=front->next;x=p->data;
	return x;
}


int main()
{
	LinkQueue a;
	int b,n,x;
	cout<<"請輸入您想輸入數的個數為:";
	cin>>n;
	cout<<"請輸入一組數:";
	for(int i=0;i<n;i++)
	{
		cin>>x;
		a.Enqueue(x);
	}
    cout<<"請輸入您想彈出數的個數:"<<endl;
	cin>>b;
	cout<<"結果如下:";
	for(int p=n;p>n-b;p--)
	cout<<a.Dequeue()<<endl;
    return 0;
}

結果:


六、心得體會

     理解了佇列的結構限制,在實驗中蹦出很多想法來操作佇列。需要更加細心緊密的思維去理解佇列和棧才能說上手。