版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liunan199481/article/details/82979147
介绍
- 该程序是在c++14标准下编写的,目测c++11和17都是可以使用的
- 使用的是clion+mingw编译通过
栈的介绍
- 只能在栈顶插入和删除的一种数据结构
- 满足后进先出的原则,所以适用于这种场景
具体实现介绍
- 使用数组保存栈内容
- 由于使用模板,改栈可以保存多种类型的数据
- 基本操作是入栈和出栈
源码
- 代码也在vs2008上编译通过,不过要在main函数中,return 0这行前一行加上:system(“pause”); 让控制台停留
#include <iostream>
template <class T>
class Stack
{
public:
Stack(int);
~Stack();
void push(T);
T pop();
int size();
private:
void init(int);
private:
int top;//栈顶
int max_size;
T* arry;
};
template <class T> Stack<T>::Stack(int stack_size) {
init(stack_size);
}
template <class T> Stack<T>::~Stack() {
delete []arry;
}
template <class T> void Stack<T>::push(T t) {
if(top>=max_size)
{
std::cout<<"stack is overflow!"<<std::endl;
return;
}
arry[top++] = t;
}
template <class T> T Stack<T>::pop() {
if(top==0)
{
std::cout<<"Stack is empty! can't pop!"<<std::endl;
}
T t = arry[top-1];
--top;
return t;
}
template <class T> int Stack<T>::size() {
return top;
}
template <class T> void Stack<T>::init(int stack_size) {
if(stack_size<=0)
{
std::cout<<"Init failed!"<<std::endl;
return;
}
top = 0;
max_size = stack_size;
arry = new T[stack_size];
}
int main() {
Stack<int> s(10);
s.push(1);
s.push(2);
std::cout<<"deleted elem:"<<s.pop()<<std::endl;
std::cout<<"stack size:"<<s.size()<<std::endl;
return 0;
}