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;
}
四、效果圖
五、實驗心得
參考實驗書進行比照練習,需要勤加學習,認真搞懂代碼含義