【數據結構】一個數組實現兩個棧

一個數組實現兩個棧有很多想法,我先寫一種比較簡單的,思路如下圖所示:


代碼如下:

#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;
}


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