数据结构复习【第三章】 栈

(1)掌握栈的相关概念、特点和基本操作(入栈、出栈、判栈空、获取栈元素等)。

栈:限制只能在表的一端进行插入和删除的线性表。

允许插入和删除的一端,称为栈顶(top)。

不允许插入和删除的另一端,称为栈底(bottom)。

把一个元素从栈顶放入栈中的操作,称为进栈、入栈或压栈 (push)

从栈顶取出一个元素的操作称为出栈或弹出(pop)。

特点:后进先出

(2)掌握顺序栈、链栈、共享栈的实现。

顺序栈:

基本操作:

  创建:

{
     base = new T[m];
     if (base = = NULL)    {
        exit(1);
    }
     stacksize = m;
     top=-1;
}

  入栈:

{
   if (top = = stacksize-1)
       throw "栈满,无法入栈";
   top++;
   base[top]=x;
}

  出栈:

{
   if ( top = = -1)
      throw “栈空,不能出栈”;
   x = base[top--];
   return x;
}

  判断栈空:top==-1

    获取栈顶元素:

{
    if ( top = = -1 )
       throw "栈空,栈顶无元素";
     return base[top];
}

链栈:

  结点定义:

struct Node
{
    T data;
    Node<T> *next;//此处T可以省略
};

  入栈:

{
     s=new Node<T>;
     s->data=x;
     s->next=top;
      top=s;
}

  出栈:

{
    if (top = = NULL)
        throw"下溢";
    p = top;
    x = top->data;
    top = top->next;
    delete p;
    return x;
}

两者比较:

(3)掌握栈的典型应用:

① 递归;

② 表达式的表示及其求值。

中缀表达式求值:

Step 1:表达式结束符进操作符栈
Step 2:读入表达式操作数或操作符
Step 3:如果读到的字符不是表达式结束符或者操
               作符栈的栈顶元素不是结束符,则进行下
               列操作:
       3.1  如果是操作数,入操作数栈,读入下一个
            字符
       3.2  如果是操作符,把操作符栈的栈顶元素 (θ1)
              与它(θ2)比较
           3.2.1 如果比较结果是:θ1<θ2,则该操作
                    符进栈,读入下一个字符
           3.2.2 如果比较结果是:θ1 =θ2 ,操作符
                    退栈,消去一个括号,读入下一个字符
           3.2.3 如果比较结果是:θ1>θ2,从操作符栈
                    退出一个运算符,从操作数栈退出二个
                     操作数,进行运算,并将运算结果入操
                     作数栈
Step 4:操作数栈顶元素即为表达式计算结果 

例:1 + 2 * ( 7 – 4 ) / 3

操作数栈变化:

改为后缀表达式:(遇到运算符,出栈两个数字运算,并把结果放到栈中)

1、写出中缀表达式
2、按运算先后把每一次运算用括号括起
3、把运算符移至对应的括号的后面
4、去除括号

求值过程中栈的变化:

原文地址:https://www.cnblogs.com/yg1024/p/9690295.html

时间: 2024-10-18 19:44:32

数据结构复习【第三章】 栈的相关文章

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

【知识强化】第三章 栈和队列 3.1 栈

在第三章我们将继续学习三种非常重要的线性结构,分别是栈和队列的这样的受限线性表.我们将从它们的基本概念.存储结构以及相关应用这三方面进行详细的学习.最后我们将学习数组的相关知识,大家要注意一下这里的数组指的是一种线性结构,与我们之前在程序设计语言当中提到的数组类型是不同的概念.好,数组我们会学习它的定义以及它的存储结构,还有用数组来实现矩阵的压缩存储.最后还会提一个特殊的矩阵叫做稀疏矩阵.好,这就是本章所要学习的重要考点.本章所学习的知识点其实并不难,它常常出现在选择题当中,但是在之后我们解决一

复习第三章多态

第三章  多态 本章需要掌握的东西 掌握多态的优势和应用场合 答:多态的优势可以减少代码量,更加清晰明了.,应用场合为,一个事物需要做多种事情的时候需要用到多态. 2.掌握父类和子类之间的类型转换 答:父类引用转向子类为向上转型,自动类型转换.子类引用转向父类为向下类型转换,需要强制转换. 3.掌握instanceof运算符的使用 答:这个不是很实用了解一下就OK,我了解的是 这个可以判断类型转换的东西. 4.使用父类作为返回值实现多态 答:如果要返回多个子类的值,可以使用父类作为返回值,父类包

Java基础复习---第三章

第三章 面向对象 面向对象更加强调运用人类在日常的是为逻辑中采用的思想方法与原则 抽象.分类.继承.聚合.多态 面向对象与面向过程 ? 面向过程:强调的是功能行为 ? 面向过程:将功能封装进对象,强调具备了功能的对象 面向对象三大特征 ? 封装.继承.多态 OOP思想概述 类 :对现实世界事物的抽象定义 对象:类的实体(实例) ? ? ps. 类就像汽车设计图 对象就像实际的汽车 ? 类(class)和对象(object)是面向对象的核心概念.类是对现实世界事物的描述,类是抽象.概念上的定义.

数据结构之第三章之栈

栈和队列其实就是操作受限的队列. 1--栈的特点:栈是限定仅在表的另一端(栈顶)进行插入,删除操作的线性表,是后进先出的线性表. 2--顺序栈 (1)顺序栈的存储表示 typedef struct Node{ struct Node *base;//栈底指针,在栈构造之前和销毁之后,base的值为NULL struct Node *top;//这个是栈定指针,用以压栈的位置. int size;//当前已分配的存储单元数,以元素为单位 }NODE,*PNODE; (2) 压栈操作 int pus

JavaScript数据结构与算法——第三章 栈

栈:后进先出.栈顶在最后,栈底在最前.新添加的元素和待删除的元素抖保存在栈的末尾. 创建一个栈: function Stack() { var items = []; /*用数组保存栈里的元素*/ this.push = function(e) { items.push(e); } this.pop = function() { return items.pop(); } this.peek = function() { return items[length - 1]; } this.isEm

数据结构——第三章 栈

先入后出 1.栈的进出问题(题目一般只说入栈顺序,而没说啥时候出来) 2.逆波兰式(栈的后缀表示,从中缀转后缀) 例: (a+b)*3 +2 运算符在两个操作数中间,为中缀表达式 因为电脑太笨,所以需要将中缀表达式转换成后缀表达式,利用栈进行计算. 算法: 如何将中缀表达式转换成后缀表达式? 1.按执行的先后顺序,给表达式全部加上括号 2.把所有运算符移到右括号的后面 3.把所有的括号删除 例: a/b^c+d*e-a*c 1.这个式子需要这样计算 (((a/(b^c))+(d*e) )-(a*

《数据结构》第3章-栈与队列的学习总结

我之前有接触过栈和队列,当时就觉得很好奇,那是以怎样的存储结构存储数据的呢?拨开重重迷雾,终于学到基础知识了. 学习<栈和队列>有两个星期了,有了前面两个章节的思维基础,我觉得栈和队列学习起来还是很好理解的,通过一些实际应用例子,让我有了更进一步的理解.现在我梳理一下知识,下面总结这一章我所学习到的东西. 一.栈(后进先出:LIFO) 1.顺序栈 这是顺序栈的存储结构: typedef struct { int *base;//栈底指针 int *top; //栈顶指针 int size; /

《大话数据结构》--- 第四章 栈与队列

栈(Stack)是限定仅在表尾进行插入和删除操作的线性表. 把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈.栈又称为后进先出的线性表,简称LIFO结构. 栈的插入操作,叫做进栈,也称压栈.入栈. 栈的删除操作,叫做出栈,也称弹栈. 当两个栈一个占用内存可能太大 但内容较少 另一个占用内存可能有剩余 可以考虑使用一个数组来存两个栈,一个底端从下标0开始,另一个底端从下标n-1开始,只要两个栈不碰头 就可以实现空间的有效利用. 栈的链式存储结构称为栈链. 如果栈的使用过