重学数据结构系列之——栈
学习来源:计蒜客
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
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号