栈(stack):后入先出(LIFO),有入栈Push、出栈Pop等操作。
一个简单的栈(Stack)实现(基于数组):
#pragma once
#include
#include
using namespace std;
template
class MyStack
{
public:
MyStack(void) : top(-1) {}
~MyStack(void) {}
void Push(const T &data);
const T& Pop();
int GetStackSize() {return stackSize;}
void Output(); // 输出栈中数据(测试用)
private:
int top; // 栈顶
T S[stackSize]; // 栈缓冲区
};
template
void MyStack<T, stackSize>::Push(const T &data)
{
assert(top < GetStackSize()-1); // 防止栈上溢
top++;
S[top] = data;
}
template
const T& MyStack<T, stackSize>::Pop()
{
assert(top>=0); // 防止栈下溢
return S[top--];
}
template
void MyStack<T, stackSize>::Output()
{
for (int i=0; i<=top; ++i )
{
cout << S[i] << " ";
}
cout << endl;
}
测试代码:
#include "stdafx.h"
#include "MyStack.h"
int _tmain(int argc, _TCHAR* argv[])
{
MyStack<int, 20> stack;
stack.Push(2);
stack.Push(1);
stack.Push(5);
stack.Push(10);
stack.Output();
stack.Pop();
stack.Pop();
stack.Pop();
stack.Output();
stack.Push(7);
stack.Push(9);
stack.Pop();
stack.Output();
return 0;
}