C++:模拟实现顺序栈结构
1. 栈的介绍
- 在数据结构中,栈是很特殊的一种结构,它是先进后出的存储结构,进行数据的插入和删除的一段为栈顶,另外一端为栈底。
- 栈也分为顺序栈和链式栈两种,两中栈采用的线性表不同,实现的机制也有所差异。链式栈可以在链表的一段自由添加元素,顺序栈不可以。
2. 栈的接口
- 判栈空: empty()
- 元素进栈: Push(x)
- 元素出栈: Pop()
- 取栈顶元素:Top()
3. 实现代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vld.h>
#include<assert.h>
using namespace std;
namespace bit
{
template<class T>
class stack
{
public:
stack(int sz = STACK_DEFAULT_SIZE)
{
_capacity = sz > STACK_DEFAULT_SIZE ? sz : STACK_DEFAULT_SIZE;
_base = new T[_capacity];
_top = 0;
}
~stack()
{
if (_base)
{
delete[]_base;
_capacity = _top = 0;
}
}
public:
void push(const T& x)//入栈
{
if (_top >= _capacity)
return;
_base[_top++] = x;
}
void pop()//出栈
{
if (_top == 0)
return;
_top--;
}
T& top()const//取栈顶元素
{
assert(_top != 0);
return _base[_top - 1];
}
bool empty()const//栈置空
{
if (_top == 0)
return true;
else
return false;
}
private:
enum { STACK_DEFAULT_SIZE = 8 };
T* _base;
size_t _capacity;
size_t _top;
};
};
void main()
{
bit::stack<int> st;
for (int i = 1; i <= 5; ++i) {
st.push(i);
cout << i << "入栈." << endl;
}
cout << "栈顶元素"<< st.top() << endl;
cout << "栈不为空返回:"<<st.empty() << endl;
while (!st.empty())
{
int val = st.top();
st.pop();
cout << val << " 出栈." << endl;
}
cout << "栈为空返回:" << st.empty() << endl;
system("pause");
}