栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。由于栈也是线性表,因此线性表的存储结构对栈也适用,通常栈有顺序栈和链栈两种存储结构,这两种存储结构的不同,则使得实现栈的基本运算的算法也有所不同。
下面用C++代码实现顺序栈,部分注释已在代码中给出!
//栈
#include<iostream>
using namespace std;
#define STACK_SIZE 10
//顺序栈
template<class T>
class stack
{
public:
stack()
:_size(0)
{}
void push(const T& data)
{ //判断是否为满
if (_size == STACK_SIZE)
return;
_array[_size++] = data;
}
//取元素
void pop()
{
--_size;
}
//获取栈顶元素
T& Top()
{
return _array[_size - 1];
}
const T& Top()const
{
return _array[_size - 1];
}
//求元素
size_t size()const
{
return _size;
}
//判空
bool Empty()const
{
return 0 == _size;
}
private:
T _array[STACK_SIZE];
int _size;//栈中有效元素的个数
};
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
cout << s.size() << endl;
cout << s.Top() << endl;
s.pop();
cout << s.size() << endl;
cout << s.Top() << endl;
s.pop();
s.pop();
cout << s.size() << endl;
cout << s.Top() << endl;
system("pause");
return 0;
}