實驗四 順序棧

一、實驗目的

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

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


二、實驗內容

1、自己確定結點的具體數據類型和問題規模:

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

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

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


三、源代碼

頭文件

#ifndef SeqStack_H
#define SeqStack_H
const int StackSize=50;

/*定義模版類SeqStack*/
template<class DataType>
class SeqStack
{
private:
        DataType data[StackSize];   /*存放棧元素的數組*/
        int top;                    /*棧頂指針 指示棧頂元素在數組中的下標*/
public:
        SeqStack();                 /*構造函數 棧的初始化*/
        ~SeqStack(){}               /*析構函數*/
        void Push(DataType x);      /*將元素x入棧*/
        DataType Pop();             /*將棧頂元素彈出*/
        DataType GetTop();          /*取棧頂元素*/
        int Empty();                  /*判斷棧是否爲空*/

};
#endif
源文件

#include"SeqStack.h"
/*引入類SeqStack的聲明*/

template<class DataType>
/*定義類SeqStack的成員函數*/

SeqStack<DataType>::SeqStack()
{
    top=-1;
}

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

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

template<class DataType>
DataType SeqStack<DataType>::GetTop()
{
    if(top!=-1)
        return data[top];
}

template<class DataType>
int SeqStack<DataType>::Empty()
{
    if(top==-1) return 1;
    else return 0;
}


主函數

#include<iostream>
using namespace std;
#include"SeqStack.cpp"

void main()
{
    SeqStack<int> S;
    if(S.Empty())
        cout<<"棧爲空"<<endl;
    else
        cout<<"棧非空"<<endl;
    cout<<"對20和12執行入棧操作"<<endl;
    S.Push(20);
    S.Push(12);
    cout<<"棧頂元素爲:"<<endl;
    cout<<S.GetTop()<<endl;
    cout<<"執行一次出棧操作"<<endl;
    S.Pop();
    cout<<"棧頂元素爲:"<<endl;
    cout<<S.GetTop()<<endl;
}

四、效果圖



五、實驗心得

參考實驗書進行比照練習,需要勤加學習,認真搞懂代碼含義

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章