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

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

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

一、實驗目的

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

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

二、實驗內容

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

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

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

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

3、選做題(*

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

三、實驗步驟

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

 實驗中選用的是整型來進行棧的資料輸入。

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

   入佇列:只考慮在連結串列的尾部進行,鏈佇列帶頭結點,讓隊頭指標和隊尾指標均指向頭結點。

   出佇列:只考慮在鏈佇列的頭部進行,需要注意佇列長度等於1的特殊情況。

3、完整程式;

#include<iostream>
using namespace std;
const int S=10;
struct Node
{
	int data;
	Node *next;
};
class LinkQueue
{
	public:
		LinkQueue();
		void Push(int x);
		int Pop();
		int Gettop(){ if(front!=rear) return front->next->data; }
		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::Push(int x)
{    
    Node *s;
    s=new Node;s->data=x;
    s->next=NULL;
    rear->next=s;
	rear=s;
}
int LinkQueue::Pop()
{   
    int x;
    Node *p;
	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 main()
{   
    int i,s,x;
	LinkQueue Stact;
	do
	{
	cout<<endl<<"\t\t\t   鏈佇列"<<endl<<"\t\t\t輸入進佇列的數:";
	cin>>i;
	cout<<"\t\t\t是否繼續輸入?(1/0):";
	cin>>s;
	Stact.Push(i);
	}
	while(s);
	
	while(1)
	{
	cout<<endl<<"\t\t\t   鏈佇列"; 
	cout<<endl<<"\t\t\t 1、入佇列";
	cout<<endl<<"\t\t\t 2、出佇列";
	cout<<endl<<"\t\t\t 3、佇列頂數";
	cout<<endl<<"\t\t\t 4、佇列是否為空";		
    cout<<endl<<"\t\t\t請選擇操作(0-4):";
	cin>>x;
	cout<<endl;
	if(x==0)
	break;	
	switch(x)
	   {
		case 1:                                   
			{
			   do
	          {
	            cout<<endl<<"\t\t\t輸入進佇列的數:";
		        cin>>i;
		        cout<<"\t\t\t是否繼續輸入?(1/0):";
		        cin>>s;
		        Stact.Push(i);
	          }
		        while(s);
		        break;
			}
		case 2: 
	     	{
			    cout<<"\t\t\t出佇列:"<<Stact.Pop()<<endl;
			    break;
	    	}
	    case 3:
	    	{
	    		cout<<"\t\t\t佇列頂數:"<<Stact.Gettop()<<endl;
	    		break;
	    	}
	    case 4:
	    	{
	    		cout<<"\t\t\t佇列是否為空:"<<Stact.Empty();
	    		break;
	    		
	    	}
		default:
			{
				cout<<"\t\t\t請輸入數字(0-5)!"<<endl;
			}  
	   } 
    }	
}

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


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

在鏈佇列中,運用迴圈的方式來進行入佇列。鏈佇列不同於迴圈佇列,是用指標來實現的,所以不存在“假溢位”問題。

相關推薦

實驗4佇列基本操作實現及其應用《順序佇列

實驗4:棧和佇列的基本操作實現及其應用之順序佇列 一、實驗目的 1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、   學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順

實驗4佇列基本操作實現及其應用佇列

實驗4:棧和佇列的基本操作實現及其應用之鏈佇列 一、實驗目的 1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、   學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個

實驗4佇列基本操作實現及其應用《進位制轉換》

#include "SeqStack.h" template SeqStack::SeqStack() { top = -1; } template void SeqStack::Push(DataType x) { if (top == StackSize - 1)throw"上溢"; top++;

實驗4佇列基本操作實現及其應用——

一、實驗目的 1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、      學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。 分別建

實驗4佇列基本操作實現及其應用——進位制轉換以及實驗總結

一、實驗目的 1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、      學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。 分別建

實驗佇列基本操作實現及其應用——順序

一、實驗目的1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、      學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。分別建立一個順序佇列和鏈佇列,實

資料結構實驗佇列基本操作實現及其應用

一、實驗目的 1,熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2,學會使用棧和佇列解決實際問題。 二、實驗內容 1,自己確定結點的具體資料型別和問題規模: 分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。 分別建立一個順

實驗3佇列基本操作實現及其應用——順序佇列佇列

實驗3:棧和佇列的基本操作實現及其應用一、實驗目的1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、      學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操

實驗3佇列基本操作實現及其應用——順序

實驗3:棧和佇列的基本操作實現及其應用一、實驗目的1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、      學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操

實驗2佇列基本操作實現及其應用

一、實驗目的1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、   學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。分別建立一個順序佇列和鏈佇列,實現佇列的

實驗佇列基本操作實現及其應用

#include using namespace std; struct Node{ int data; Node *next; }; class QueueOfCanteen{ private: Node *front,*rear; int total; //計算當前排隊人數,並作為入隊單號的參

佇列基本操作實現及其應用

實驗2:棧和佇列的基本操作實現及其應用 一、實驗目的 1、   熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、      學會使用棧和佇列解決實際問題。 二、實驗內容 1

《資料結構與演算法設計》實驗報告書二叉樹的基本操作實現及其應用

《資料結構與演算法設計》實驗報告書之二叉樹的基本操作實現及其應用 實驗專案 二叉樹的基本操作實現及其應用 實驗目的 1.熟悉二叉樹結點的結構和對二叉樹的基本操作。 2.掌握對二叉樹每一種操作的具體實現。 3.學會利用遞迴方法編寫對二叉樹這種遞迴資料結構進行處理的演算法。 4.會用二叉

資料結構實驗一線性表的基本操作實現及其應用

一.實驗名稱 線性表的基本操作實現及其應用 二.實驗目的 熟練掌握線性表的結構特點,掌握順序表的基本操作。 學會使用順序表解決實際問題。 三.實驗內容 建立 n 個元素的順序表(n 的大小和表裡資料自己確定),實現相關的操作:輸出,插入,刪

《資料結構》實驗佇列實驗報告

一..實驗目的      鞏固棧和佇列資料結構,學會運用棧和佇列。 1.回顧棧和佇列的邏輯結構和受限操作特點,棧和佇列的物理儲存結構和常見操作。 2.學習運用棧和佇列的知識來解決實際問題。 3.進一步鞏固程式除錯方法。 4.進一步鞏固模板程式設計。 二.實驗時間    準備

《資料結構》實驗佇列實驗實驗報告)

一.實驗目的      鞏固棧和佇列資料結構,學會運用棧和佇列。 1.回顧棧和佇列的邏輯結構和受限操作特點,棧和佇列的物理儲存結構和常見操作。 2.學習運用棧和佇列的知識來解決實際問題。 3.進一步鞏固程式除錯方法。 4.進一步鞏固模板程式設計。 二.實驗內

《資料結構》實驗佇列實驗

《資料結構》實驗三:    棧和佇列實驗 一..實驗目的      鞏固棧和佇列資料結構,學會運用棧和佇列。 1.回顧棧和佇列的邏輯結構和受限操作特點,棧和佇列的物理儲存結構和常見操作。 2.學習運用棧和佇列的知識來解決實際問題。 3.進一步鞏固程式除錯方法。 4.進一步鞏

《資料結構》實驗 佇列實驗

 一..實驗目的      鞏固棧和佇列資料結構,學會運用棧和佇列。 1.回顧棧和佇列的邏輯結構和受限操作特點,棧和佇列的物理儲存結構和常見操作。 2.學習運用棧和佇列的知識來解決實際問題。 3.進一步鞏固程式除錯方法。 4.進一步鞏固模板程式設計。 三..實驗內容

實驗4[bx]loop的使用

實驗任務一 綜合使用 loop,[bx],編寫完整彙編程式,實現向記憶體 b800:07b8 開始的連續 16 個字單元重複填充字資料 0403H 實現: 1.編寫原始碼檔案:test1.asm 注意點:在彙編程式中,資料不能以字母開頭。b800前要加上0。 2.編譯、連結 批處理檔案:p

實驗 4二叉樹的實驗 1

一、實驗目的 1、 熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現; 2、 掌握樹的順序結構的實現; 3、 學會運用樹的知識解決實際問題。 二、實驗內容  自己確定一個二叉樹(樹結點型別、數目和結構自定)利用順序結構方法儲存。 實現樹的構造,並完成: