数据结构实验
PS:仅数据结构实验记录
题目:设计两个栈 S1、S2 都采用顺序栈方式,并且共享一个存储区[0,MaxLen-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式,如图所示。设计一个有关栈的入栈和出栈算法。
#include<iostream>
using namespace std;
const int MaxLen = 50;
template <typename DataType>
class Dou_Stack
{
public:
Dou_Stack(); //构造函数
~Dou_Stack() {} //析构函数
void En_Stack(DataType x, int i); //入栈操作
DataType De_Stack(); //出栈操作
void Gethead(); //取栈顶元素
private:
DataType data[MaxLen];
int top1;
int top2;
};
template <typename DataType>
Dou_Stack<DataType>::Dou_Stack() //构造函数
{
top1 = -1; //S1栈顶元素下标
top2 = MaxLen; //S2栈顶元素下标
}
template <typename DataType>
void Dou_Stack<DataType>::En_Stack(DataType x, int i) //入栈操作
{
if (top1 < top2)
{
if( i == 1 )
data[++top1] = x;
else
{
if (i == 2)
data[--top2] = x;
else
throw "插入位置有误";
}
}
else
throw "插入位置有误";
}
template <typename DataType>
DataType Dou_Stack<DataType>::De_Stack() //出栈操作
{
int i;
DataType x;
cout << "\n请输入要进行出栈操作的栈(1为S1栈,2为S2栈):";
cin >> i;
if (i == 1)
{
if (top1 == -1)
throw "下溢";
else
{
x = data[top1];
top1--;
cout << "S1栈顶元素 " << x << " 出栈成功" << endl;
return x;
}
}
else
{
if (i == 2)
{
if (top2 == MaxLen)
throw "上溢";
else
{
x = data[top2];
top2++;
cout << "S1栈顶元素 " << x << " 出栈成功" << endl;
return x;
}
}
else
throw "删除位置有误";
}
}
template <typename DataType>
void Dou_Stack<DataType>::Gethead()
{
if (top1 != -1)
{
cout << "\n栈S1的栈顶元素为:" << data[top1] ;
}
else
cout << "栈1为空";
cout << endl;
if (top2 != -MaxLen)
{
cout << "栈S2的栈顶元素为:" << data[top2];
}
else
cout << "栈1为空";
cout << endl;
}
//测试函数
int main()
{
Dou_Stack<int> D;
int a1[5] = { 1, 3, 5, 7 ,9 };
int a2[5] = { 2 ,4, 6, 8 ,10 };
cout << "将数组a1,a2分别入栈S1,S2:";
try
{
for (int i = 0; i < 5; i++)
{
int j = a1[i];
int k = a2[i];
D.En_Stack(j, 1);
D.En_Stack(k, 2);
}
D.Gethead();
D.De_Stack();
D.Gethead();
D.De_Stack();
D.Gethead();
}
catch (char* str)
{
cout << str << endl;
}
}
测试结果
本组实验的初始为两组整型数组:a1[5] = { 1, 3, 5, 7 ,9 }、 a2[5] = { 2 ,4, 6, 8 ,10 }分别入栈S1和S2;