您的位置:首页 > 编程语言 > C语言/C++

C++实现栈

2016-04-26 21:23 387 查看
栈只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(LIFO,Last In First Out)。
#pragma once
#include<assert.h>

template<class T>
class Stack
{
public:
Stack()
:_array(NULL)
, _capicity(0)
, _topIndex(-1)
{}
~Stack()
{
delete[]_array;
_capicity = 0;
_topIndex = -1;
}

void Push(const T& x)//入栈
{
if (_topIndex + 1 == _capicity)
{
_capicity = 2 * _capicity + 3;
T* tmp = new T[_capicity];
if (tmp == NULL)
{
cout << " New Failed!" << endl;
exit(-1);
}
memcpy(tmp,_array,sizeof(T)*(_topIndex+1));

delete[] _array;
_array = tmp;
}
_array[++_topIndex] = x;
}
void Pop()//出栈
{
assert(_topIndex > -1);
--_topIndex;
}
bool Empty()
{
return _topIndex == -1;
}
bool Full() const
{
return _topIndex == _capicity - 1;
}
const T& Top()
{
return _array[_topIndex];
}

private:
T* _array;         //数据块
size_t _capicity;  //容量
int _topIndex;     //栈顶数据的下标
};


#include<iostream>
#include"Stack.hpp"
using namespace std;
void Test()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Pop();
while (!s.Empty())
{
cout << s.Top() << " ";
s.Pop();
}
cout << endl;
}

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