中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++實現棧

發布時間:2020-05-08 16:11:53 來源:網絡 閱讀:347 作者:xyzbaihaiping 欄目:編程語言

棧的概念

棧是數據結構中一種特殊的線性表,它的基本特性是“先入后出,后入先出”。如下圖:


c++實現棧

棧的基本操作

棧有基本操作如下:

void Push(const T& d);//入棧
 void Pop();//出棧
 T& Top();//返回棧頂元素
 bool Empty();//判斷是否為空棧
 size_t Size();//棧中元素個數


棧的實現

Stack.hpp


#pragma once
#include<iostream>

using namespace std;

template<class T>
class Stack
{
public:
 Stack();
 ~Stack();
 Stack(const Stack<T>& s);
 Stack<T>& operator=(Stack<T> s);
 void Push(const T& d);
 void Pop();
 T& Top();
 bool Empty();
 size_t Size();
protected:
 void _CheckCapacity();
protected:
 T* _a;
 size_t _top;
 size_t _capacity;
};
template<class T>
void Stack<T>::_CheckCapacity()
{
 if (_a == NULL)
 {
  _capacity = 3;
  _a = new T[_capacity];
  return;
 }
 if (_top == _capacity)
 {
  _capacity += 3;
  T* tmp = new T[_capacity];
  for (size_t i = 0; i < _top; i++)
  {
   tmp[i] = _a[i];
  }
  delete[] _a;
  _a = tmp;
 }
}

template<class T>
Stack<T>::Stack()
:_a(0)
, _top(0)
, _capacity(0)
{}

template<class T>
Stack<T>::~Stack()
{
 if (_a)
 {
  delete[] _a;
 }
}
template<class T>
Stack<T>::Stack(const Stack<T>& s)
:_top(s._top)
,_capacity(s._capacity)
{
 _a = new T[_capacity];
 for (size_t i = 0; i < _top; i++)
 {
  _a[i] = s._a[i];
 }

}

template<class T>
Stack<T>& Stack<T>::operator=(Stack<T> s)
{
  swap(s._a,_a);
  _top = s._top;
  _capacity = s._capacity; 
     return *this;
}
//template<class T>
//Stack<T>& Stack<T>::operator=(const Stack<T>& s)
//{
// if (this != &s)
// {
//  delete[] _a;
//  _capacity = s._capacity;
//  _top = s._top;
//  _a= new T[_capacity];
//  for (size_t i = 0; i < _top; i++)
//  {
//   _a[i] = s._a[i];
//  }
// }
// return *this;
//}

template<class T>
void Stack<T>::Push(const T& d)
{
 _CheckCapacity();
 _a[_top++] = d;
}

template<class T>
void Stack<T>::Pop()
{
 if (_top)
 {
  --_top;
 }
}

template<class T>
T& Stack<T>::Top()
{
 return _a[_top - 1];
}
template<class T>
bool Stack<T>::Empty()
{
 if (_top == 0)
  return true;
 else
  return false;
}

template<class T>
size_t Stack<T>::Size()
{
 return _top;
}


//test.cpp

 #include "Stack.h"
#include<string>
int main()
{
 Stack<string> s;
 s.Push("1111111111111");
 s.Push("2222222222222");
 s.Push("3333333333333");
 s.Push("4444444444444");
 s.Push("5555555555555");
 Stack<string> s1(s);
 Stack<string> s2;
 s2 = s;
 while (!s2.Empty())
 {
  cout << s2.Top() << " ";
  s2.Pop();
 }
 getchar();
 return 0;
}

運行結果:

c++實現棧

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁都县| 德阳市| 都江堰市| 涟源市| 嵩明县| 达日县| 肃南| 子长县| 洪雅县| 富顺县| 黑山县| 鄂托克旗| 林口县| 崇礼县| 孝感市| 响水县| 海口市| 黑山县| 济阳县| 高雄市| 高邮市| 广宁县| 阳原县| 武宁县| 新津县| 南投市| 寿阳县| 柳河县| 南京市| 常熟市| 长岛县| 福安市| 本溪市| 寻甸| 千阳县| 南汇区| 蚌埠市| 衡水市| 萝北县| 抚顺县| 昂仁县|