c++實現的順序棧


棧是一種運算受限的線性表,是一種先進后出的數據結構,限定只能在一端進行插入和刪除操作,允許操作的一端稱為棧頂,不允許操作的稱為棧底 

因此需要的成員變量如下

int  *_stack;    //指向申請的空間的首地址
int top;           //記錄棧頂的位置
int size;         //記錄申請空間的大小

具體如下封裝在類中

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
class SeqStack
{
  public:
    SeqStack(int size=10)       //構造函數   初始化
    {
     _stack=new int[size];     
     _top=0;
     _size=size;
    }
    SeqStack(const SeqStack &src)   // 拷貝構造函數(防止淺拷貝)
    {
      _stack=new int[src._size];
      int i=0;
      for(;i<src._top;i++)
      {
        _stack[i]=src._stack[i];
      }
      _size=src._size;
      _top=src._top;
    }
    SeqStack(SeqStack &&src)       //右值拷貝函數  防止臨時量的空間時間的浪費
    {
      _stack=src._stack;
      _size=src._size;
      _top=src._top;
      src._stack=nullptr;
    }
    SeqStack & operator=(const SeqStack &src)      //賦值構造函數  返回地址  實現連續賦值
    {
      if(this==&src)
      {
        return *this;
      }
      delete[]_stack;
      _stack=new int[src._size];
      int i=0;
      for(;i<src._top;i++)
      {
        _stack[i]=src._stack[i];

      }
      _size=src._size;
      _top=src._top;
      return *this;
    }
    SeqStack & operator=( SeqStack &&src)  // 右值賦值構造函數 防止臨時量對空間時間的浪費
    {
      delete []_stack;
      _stack=src._stack;
      _size=src._size;
      _top=src._top;
      src._stack=nullptr;
      return *this;
    }
   ~SeqStack()      // 析構函數
   {
     delete[]_stack;
     _stack=nullptr;
   }
   void push(int val)  // 棧頂插入
   {
     if(full())
     {
       resize();          // 調用2倍擴容
     }
     _stack[_top]=val;
     _top++;
   }
   void pop()          //  棧頂刪除
   {
     if(empty())
     {
      return;

     }
     _top--;
   }
   int top()        //返回棧頂元素
   {
     return mpstack[_top-1];
   }
   bool empty()      // 是否為空
   {
    return _top==0;
   }
   bool full()     //  是否為滿
   {
     return _top==_size;
   }
  private:
    int *_stack;
    int _top;
    int _size;
    void resize()    //  2倍擴容函數
    {
     int *s=new int[_size*2];
     int i=0;
     for(;i<_size;i++)
     {
     s[i]= _stack[i];
     }
     delete []_stack;
     _stack=s;
     _size=2*_size;
    }
};
int main()
{
    SeqStack st1(20);
    SeqStack st2(st1);
    SeqStack st3=st1;
    st2=st1;
      st1.push(1);
      cout<<st1.top()<<endl;
    cout<<endl;
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM