1. 程式人生 > >《資料結構》實驗三:棧和佇列實驗 (實驗報告)

《資料結構》實驗三:棧和佇列實驗 (實驗報告)

一.實驗目的

     鞏固棧和佇列資料結構,學會運用棧和佇列。

1.回顧棧和佇列的邏輯結構和受限操作特點,棧和佇列的物理儲存結構和常見操作。

2.學習運用棧和佇列的知識來解決實際問題。

3.進一步鞏固程式除錯方法。

4.進一步鞏固模板程式設計。

二.實驗內容

1.自己選擇順序或鏈式儲存結構,定義一個空棧類,並定義入棧、出棧、取棧元素基本操作。然後在主程式中對給定的N個數據進行驗證,輸出各個操作結果。

2.自己選擇順序或鏈式儲存結構,定義一個空棧佇列,並定義入棧、出棧、取棧元素基本操作。然後在主程式中對給定的N個數據進行驗證,輸出各個操作結果。

3.程式設計實現一個十進位制數轉換成二進位制數。要求,要主程式中輸出一個10進度數,輸出其對應的2進位制數序列。

    前兩題是必做題,第3題是選做題。

三.實驗結果

實驗1:

#include<iostream.h>
const int StackSize=10;

template<class DataType>
class SeqStack
{
public:
SeqStack(){top=-1;}
SeqStack(int a[],int n);
~SeqStack(){}
void Push(DataType x);
DataType Pop();
DataType GetTop(){if(top!=-1) return data[top];}
int Empty(){return (top==-1)? 1 : 0;}
private:
DataType data[StackSize];
int top;
};

template<class DataType>
SeqStack<DataType>::SeqStack(int a[],int n)
{
if(n>StackSize) throw"引數非法";
for(int i=0;i<n;i++)
data[i]=a[i];
top=n-1;
}

template<class DataType>
void SeqStack<DataType>::Push(DataType x)
{
if(top==StackSize-1) throw"上溢";
data[++top]=x;
}

template<class DataType>
DataType SeqStack<DataType>::Pop()
{
DataType x;
if(top==-1) throw"下溢";
x=data[top--];
return x;
}

void main()
{
int a[5]={2,3,5,7,11};
SeqStack<int> S(a,5);
if(S.Empty())
cout<<"棧為空"<<endl;
else
cout<<"棧非空"<<endl;
cout<<"對13執行入棧操作"<<endl;
S.Push(13);
cout<<"棧頂元素為:"<<endl;
cout<<S.GetTop()<<endl;
cout<<"執行一次出棧操作"<<endl;
S.Pop();
cout<<"棧頂元素為:"<<endl;
cout<<S.GetTop()<<endl;
}


實驗2:

#include<iostream.h>

template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};

template<class DataType>
class LinkQueue
{
public:
LinkQueue();
~LinkQueue();
void EnQueue(DataType x);
DataType DeQueue();
DataType GetQueue();
int Empty();
private:
Node<DataType> *front,*rear;
};

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

template<class DataType>
LinkQueue<DataType>::~LinkQueue()

Node<DataType> *p=NULL;
while(front!=NULL)
{
p=front;
front=front->next;
delete p;
}
}

template<class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
Node<DataType> *s=NULL;
s=new Node<DataType>;
s->data=x;
s->next=NULL;
rear->next=s;rear=s;
}

template<class DataType>
DataType LinkQueue<DataType>::DeQueue()
{
Node<DataType> *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;
}

template<class DataType>
DataType LinkQueue<DataType>::GetQueue()
{
if(front!=rear)
return front->next->data;
}

template<class DataType>
int LinkQueue<DataType>::Empty()
{
if(front==rear)
return 1;
else
return 0;
}

void main()
{
LinkQueue<int> Q;
if(Q.Empty())
cout<<"佇列為空"<<endl;
else cout<<"佇列非空"<<endl;
cout<<"元素10和15執行入隊操作!"<<endl;
Q.EnQueue(10);
Q.EnQueue(15);
cout<<"檢視隊頭元素:";
cout<<Q.GetQueue()<<endl;
cout<<"執行出隊操作!"<<endl;
Q.DeQueue();
cout<<"檢視隊頭元素:"<<Q.GetQueue()<<endl;
}


三.實驗總結

       通過這一次的實驗,我不僅實現了棧和佇列的演算法,還解決了上次作業遺留下來的問題。通過百度,我知道了“ ? : ”操作符是需要返回值的,所以問號後面的和冒號後面的都是需要一個表示式,而不是一個完整的語句。那麼 top==NULL?return 1:return 0; 語句就應該改為 return (top==-1)?1:0; 語句,程式才得以執行成功。當然,除了這一種方法以外,還可以使用 if else語句,例子在本次實驗的實驗2中。

相關推薦

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

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

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

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

資料結構實驗佇列實驗

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

資料結構實驗 佇列實驗

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

玩轉資料結構——第二章佇列

內容概覽: 棧和棧的應用:撤銷操作和系統棧 棧的基本實現 棧的另外一個應用:括號匹配 關於Leetcode的更多說明 陣列佇列 迴圈佇列 迴圈佇列的實現 陣列佇列和迴圈佇列的比較 2-1.棧(Stack) 棧也是一種線性結構

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

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

資料結構佇列的比較

 棧和佇列的比較 1.棧:僅在表尾進行插入和刪除操作的線性表;具有後進先出的特性。 後進先出的缺點:減少了棧操作的靈活性 ~~~~~~~~的優點:使得棧的操作更有效更容易實現。 2.根據儲存結構劃分,棧可分為:順序棧和鏈棧。 3.順序棧的本質是對順序表的

資料結構JAVA版之佇列

一、涉及的內容大綱 二、簡單介紹棧、佇列和其他資料結構的不同 1 對於其他的資料結構而言,都適用與資料庫應用中作資料記錄。但是因為棧和佇列的生命週期比那些資料庫型別的資料結構要短,所以他們只是在程式的操作期間才會建立和執行,在完成任務之後就會被銷燬。所以棧和佇列更多的是用於構思演算法的

資料結構實踐 停車場模擬 佇列綜合

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構學習篇之佇列

棧和佇列是什麼 棧和佇列是兩種特殊的線性表,它們是限定只能在表的一端或兩端進行插入、刪除元素的線性表,因此,統稱為限定性資料結構。 共同點:   都是隻能線上性表的端點插入和刪除。不同點:  棧的插入和刪除都線上性表的同一個端點,該點通稱棧頂,相應地,不能插入刪除的另一個端點通稱棧底,其特性是後進先出。

資料結構自學記錄(五):佇列

棧的定義:棧是一種只能在一端進行插入或刪除操作的線性表。 棧的一些概念:1.允許進行插入、刪除操作的一端稱為棧頂。                        2.表的另一端稱為棧底。                        3.當棧中沒有資料元素時,稱為空棧。

資料結構】--幾道佇列面試題

用兩個棧實現一個佇列 1、思路分析 拿到這道題,會有以下幾種思路: 思路一: 入隊時,將所有的元素壓入到s1中 出隊時,將s1中的所有元素倒入到s2中,然後讓s2中棧頂的元素出棧,然後將s2中所有的元素倒入到s1中 問題所在:我們不難發現,在這種解法

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

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

資料結構筆記

1. 棧的基本概念 2. 順序棧 3. 連結串列棧 1. 棧的基本概念 棧是限定只在表

資料結構演算法程式碼實現——佇列(一)

棧和佇列 棧和佇列是一種特殊的線性表。 從資料結構角度看:棧和佇列也是線性表,其特點性在於棧和佇列的基本操作是線性表操作的子集。它們是操作受限的線性表。 從資料型別角度看:它們是和線性表不相同的兩類重要的抽象資料型別。 棧的定義 棧(Stack)是限

實驗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++;

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

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

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

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