重学数据结构系列之——栈
原创
©著作权归作者所有:来自51CTO博客作者heituan的原创作品,请联系作者获取转载授权,否则将追究法律责任
学习来源:计蒜客
1.栈
在以后的重学数据结构系列,为了废话没那么多,就不复制百度百科等的了。直接用自己的话来说。
1.栈是什么
你就想象一个园桶,从上到下的直径都是一样的,我们向里面放入刚好能放入的圆碟,直到桶碟满,然而你只能从最上面的园碟开始拿。这就可以叫做栈
最重要的是先进后出,First In Last Out(FILO)。
2.栈的实现
#include<iostream>
#include<string>
#include <cassert>
using namespace std;
template<class Type> class Stack{
private:
Type *elements;
int max_size, top_index;
public:
//构造函数
Stack(int length_input){
elements = new Type[length_input];
max_size = length_input;
top_index = -1;
}
//析构函数
~Stack(){
delete[] elements;
}
//入栈
bool push(const Type &element){
//是否超过栈容量
if (top_index >= max_size-1) {
return false;
}
//栈顶向上移,并赋值
top_index++;
elements[top_index] = element;
return true;
}
//出栈
bool pop(){
//判断栈是否为空
if (top_index < 0) {
return false;
}
//栈顶向下移
top_index--;
return true;
}
//获取栈顶元素
Type top(){
assert(top_index >= 0);
return elements[top_index];
//或者
//if (!empty()) {
// return elements[top_index];
//}else{
// exit("there is no element");
//}
}
//判断栈是否为空
bool empty(){
if (top_index < 0) {
return true;
}else{
return false;
}
}
};
int main() {
int n;
string str;
cin >> n;
Stack<string> stack(n);
for (int i = 0; i < n; i++) {
cin >> str;
stack.push(str);
}
for (i = 0; i < n; i++) {
cout<<stack.top()<<" ";
stack.pop();
}
cout<<endl;
return 0;
}
3.运行结果
4.小总结
可以看到,用栈进行一些翻转操作非常方便,逆序输出,数组的reverse等
5.用程序判断出栈顺序是否可能
网络上志同道合,我们一起学习网络安全,一起进步,QQ群:694839022