您的位置:首页 > 理论基础 > 数据结构算法

【数据结构】一个数组实现两个栈

2015-10-31 16:51 363 查看
一个数组实现两个栈有很多想法,我先写一种比较简单的,思路如下图所示:



代码如下:

#include<iostream>
using namespace std;

//一个数组实现两个栈

template <class T>
class arraystack
{
public :
arraystack()
{
_array1 = new T[10];
_array2 = _array1 + 9;
_size1 = 0;
_size2 = 0;
_capacity = 10;
}

void pusharray1(const T& x)
{
//判断数组是否已满
if( (_size1+_size2) < _capacity )
{
_array1[_size1] = x;
_size1++;
}
else
cout<< "该栈已满"<<endl;
}

void pusharray2(const T& x)
{
if( (_size1+_size2) < _capacity )
{
_array1[_capacity - _size2 - 1] = x;
_size2++;
}
else
cout<< "该栈已满"<<endl;
}

T& GetTop1()
{
return _array1[_size1 - 1];
}

T& GetTop2()
{
return _array1[_capacity - _size2];
}

void poparray1()
{
//空
//
if(_size1 > 0)
{
_size1--;
}
else
cout<< "该栈为空"<<endl;
}

void poparray2()
{
if(_size2 > 0)
{
_size2--;
}
else
cout<< "该栈为空"<<endl;
}

private :
T* _array1;
T* _array2;
int _size1;
int _size2;
int _capacity;
};

void Test1()
{
arraystack< int> a1;
a1.pusharray1 (1);
a1.pusharray1 (2);
a1.pusharray1 (3);
a1.pusharray1 (4);
a1.pusharray1 (5);
cout<<a1.GetTop1 ()<<endl;
a1.poparray1 ();
cout<<a1.GetTop1 ()<<endl;

a1.pusharray2 (10);
a1.pusharray2 (9);
a1.pusharray2 (8);
a1.pusharray2 (7);
a1.pusharray2 (6);
cout<<a1.GetTop2 ()<<endl;
a1.poparray2 ();
cout<<a1.GetTop2 ()<<endl;
}

int main()
{
Test1();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: