使用模版类实现栈模型的顺序存储需要用到我们之前写好的线性表顺序存储的模版,压栈、出栈、获取栈顶元素、获取栈大小等功能均是使用内部线性表顺序储存的函数实现的。没有什么技术含量,只是将线性表包装了一次。具体代码如下:
代码语言:javascript复制#pragma once
#include "seqlist.hpp"
template<typename T
class SeqStack
{
public:
SeqStack(int capacity);
~SeqStack();
// 清空
void clear();
// 压栈
int push(T& data);
// 出栈
T pop();
// 栈顶元素
T top();
// 获取栈大小
int size();
private:
SeqList<T>* m_list;
};
template<typename T>
int SeqStack<T>::size()
{
return m_list->length();
}
template<typename T>
T SeqStack<T>::top()
{
return m_list->get(m_list->length() - 1);
}
template<typename T>
T SeqStack<T>::pop()
{
return m_list->remove(m_list->length() - 1);
}
template<typename T>
int SeqStack<T>::push(T& data)
{
m_list->insert(m_list->length(), data);
return 0;
}
template<typename T>
void SeqStack<T>::clear()
{
m_list->clear();
}
template<typename T>
SeqStack<T>::~SeqStack()
{
delete m_list;
}
template<typename T>
SeqStack<T>::SeqStack(int capacity)
{
m_list = new SeqList<T>(capacity);
}
测试代码
代码语言:javascript复制#include "SeqStack.hpp"
using namespace std;
struct Value
{
int value;
};
void SeqStackTest()
{
//创建栈
SeqStack<Value> stack(20);
//数组
Value val[5];
for (int i = 0; i < sizeof(val) / sizeof(Value); i)
{
val[i].value = i;
//压栈
stack.push(val[i]);
}
//打印栈大小
cout << "stack size = " << stack.size() << endl;
//打印栈顶元素
cout << "stack top element = " << stack.top().value << endl;
//所有元素出栈
while (stack.size() > 0)
{
cout << "POP stack element = " << stack.pop().value << endl;
}
}
int main(int argc, char* argv[])
{
SeqStackTest();
return 0;
}