zoukankan      html  css  js  c++  java
  • (4)什么是栈——5

    栈数据结构是通过对线性表的插入和删除操作进行限制而得到的(插入和删除操作都必须在表的同端完成),是一个后进先出(last-in-first-out,LIFO)的线性表。

    其中能插入和删除数据的那端被称为栈顶(top),另一端被称为栈底(bottom)。

    栈有两种实现方式,一种是顺序实现,另一种是链式实现

    使用顺序实现时,主要是在初始化栈时,需要为栈预先分配空间。

    template <class T>

    class Stack

    {

    private:

        int top;         //栈顶

        int MaxTop;   //最大的栈顶值

        T *stack;      //堆栈元素数组

    };

    使用顺序结构实现栈时,有一个缺点就是空间的利用率不高,因为需要预先为栈分配空间。而且在空间都使用了之后,要插入新的元素,就只能重新分配空间,并将原有的空间的元素复制到新的空间去。

    采用链式表示方式实现栈的时候,不需要事先为栈分配空间,因此空间的利用率相对较高.

    template <class T>

    class Node

    {

    private:

        T data;                //栈元素

        Node <T> *link;   //栈的下一个元素

    };

    template <class T>

    class Stack

    {

    private:

        Node <T> *top;    //指向栈顶结点

    };

    栈的一个经典应用是对一个表达式的括号进行匹配。在这个应用中将要匹配一个字符串中的左,右括号。

    可以观察到,如果从左至右扫描一个字符串,那么每个右括号将与最近遇到的那个未匹配的左括号相匹配。因此可以在从左至右的扫描过程中把所遇到的左括号存放到堆栈内。每当遇到一个右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。

    如何访问栈中元素——3

    访问栈的元素时,主要是针对栈顶的元素进行访问。不能直接访问其他位置的栈元素。

    ——整理自《C/C++程序员面试宝典》

  • 相关阅读:
    动态规划小练
    组合计数小练
    【WC2019】 通道
    【PKUSC2018】主斗地
    【NOI2009】诗人小G
    【THUWC 2017】随机二分图
    【NOI2017】游戏与2-sat方案输出
    Codeforces 1109D sasha and interesting fact from graph theory
    Codeforces 1152E neko and flashback
    ZJOI2019游记
  • 原文地址:https://www.cnblogs.com/thunder-wu/p/6624142.html
Copyright © 2011-2022 走看看