日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
c++實(shí)現(xiàn)棧

棧的概念

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供欒城網(wǎng)站建設(shè)、欒城做網(wǎng)站、欒城網(wǎng)站設(shè)計(jì)、欒城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、欒城企業(yè)網(wǎng)站模板建站服務(wù),10年欒城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

棧是數(shù)據(jù)結(jié)構(gòu)中一種特殊的線性表,它的基本特性是“先入后出,后入先出”。如下圖:

c++實(shí)現(xiàn)棧

棧的基本操作

棧有基本操作如下:

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

棧的實(shí)現(xiàn)

Stack.hpp


#pragma once
#include

using namespace std;

template
class Stack
{
public:
 Stack();
 ~Stack();
 Stack(const Stack& s);
 Stack& operator=(Stack 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
void Stack::_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
Stack::Stack()
:_a(0)
, _top(0)
, _capacity(0)
{}

template
Stack::~Stack()
{
 if (_a)
 {
  delete[] _a;
 }
}
template
Stack::Stack(const Stack& 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
Stack& Stack::operator=(Stack s)
{
  swap(s._a,_a);
  _top = s._top;
  _capacity = s._capacity; 
     return *this;
}
//template
//Stack& Stack::operator=(const Stack& 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
void Stack::Push(const T& d)
{
 _CheckCapacity();
 _a[_top++] = d;
}

template
void Stack::Pop()
{
 if (_top)
 {
  --_top;
 }
}

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

template
size_t Stack::Size()
{
 return _top;
}

//test.cpp

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

運(yùn)行結(jié)果:

c++實(shí)現(xiàn)棧


本文名稱:c++實(shí)現(xiàn)棧
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/ghgchh.html