• 重学数据结构系列之——栈


    学习来源:计蒜客

    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.用程序判断出栈顺序是否可能





  • 相关阅读:
    用户模板和用户场景
    移动端疫情展示
    数据爬取
    全国疫情统计可视化地图-第二、三阶段
    学习进度条-第三周
    学习进度条-第二周
    软件工程第二周开课博客
    返回一个整数数组中最大子数组的和
    JavaWeb选课系统(2)
    JavaWeb选课系统
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286560.html
Copyright © 2020-2023  润新知