数据结构重点知识点复习——第三章 栈与队列

目录

一、栈

1栈

        1顺序栈

                1.判空

                2.进栈

                3.出栈

                4.读取栈顶元素

        2共享栈

共享栈的结构

共享栈进栈操作

        ​编辑

        3链栈

链栈的结构

链栈的操作

2应用

1、括号匹配:

如何将中缀表达式转换成后缀表达式?

2、表达式求值: 

3、递归:

1.阶乘

2.斐波那契数列

二、队列

1顺序队列

2循环队列

循环队列的操作

1入队

2出队

那如何分辨队列是空还是满呢?

方法一:

方法二:

3链式队列

链式队列的操作

1入队

2出队

4双端队列


一、栈

栈(Stack):只允许在一端进行插入或删除操作的线性表。

栈顶(Top):线性表允许进行插入和删除的那一端。

栈底(Bottom):固定的,不允许进行插入和删除的另一端

特点: 1.栈是受限的线性表,所以自然具有线性关 系。

            2.栈中元素后进去的必然先出来,即后进先出 LIFO(Last In First Out)

1栈

        1顺序栈

        栈是线性表的特例,那栈的顺序存储也是线性表顺序存储的简化。栈顺序存储结构也叫作顺序栈

数据结构重点知识点复习——第三章 栈与队列_第1张图片

                1.判空

数据结构重点知识点复习——第三章 栈与队列_第2张图片

                2.进栈

                3.出栈

数据结构重点知识点复习——第三章 栈与队列_第3张图片

                4.读取栈顶元素

数据结构重点知识点复习——第三章 栈与队列_第4张图片

        2共享栈

        顺序栈的存储空间大小需要事先开辟好,很多时候对每个栈各自单独开辟存储空间的利用率不如将各个栈的存储空间共享

数据结构重点知识点复习——第三章 栈与队列_第5张图片

共享栈的结构

数据结构重点知识点复习——第三章 栈与队列_第6张图片

共享栈进栈操作
        数据结构重点知识点复习——第三章 栈与队列_第7张图片
        3链栈

        栈是线性表的特例,线性表的存储结构还有链式存储结构,所以也可以用链表的方式来实现栈。栈的链式存储结构也叫作链栈。

        特点 1.链栈一般不存在栈满的情况。

                 2.空栈的判定条件通常定为top==NULL;

链栈的结构

数据结构重点知识点复习——第三章 栈与队列_第8张图片

链栈的操作

1进栈

数据结构重点知识点复习——第三章 栈与队列_第9张图片

2出栈

数据结构重点知识点复习——第三章 栈与队列_第10张图片

2应用

1、括号匹配:

假设有两种括号,一种圆的(),一种方的[],嵌套的顺序是任意的。

算法思想:若是左括号,入栈;若是右括号,出栈一个左括号判断是否与之匹配;检验到字符串尾,还要检查栈是否为空。只有栈空,整个字符串才是括号匹配的。

数据结构重点知识点复习——第三章 栈与队列_第11张图片

如何将中缀表达式转换成后缀表达式?

1.按运算符优先级对所有运算符和它的运算数加括号。(原本的括号不用加)

2.把运算符移到对应的括号后。

3.去掉括号。

数据结构重点知识点复习——第三章 栈与队列_第12张图片

2、表达式求值: 

规则:从左到右扫描表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶的两个数字出栈然后跟这个符号进行运算,最后将运算结果进栈,直到最终获得结果。

数据结构重点知识点复习——第三章 栈与队列_第13张图片

3、递归:

要理解递归,你要先理解递归,直到你能理解递归。 如果在一个函数、过程或数据结构的定义中又应用了它自身,那么这个函数、过程或数据结构称为是递归定义的,简称递归。递归最重要的是递归式和递归边界。

1.阶乘

时间复杂度:O(NlogN)

数据结构重点知识点复习——第三章 栈与队列_第14张图片

2.斐波那契数列

时间复杂度 :O(2^n)

数据结构重点知识点复习——第三章 栈与队列_第15张图片

二、队列

队列是只允许在一端进行插入,而在另一端进行删除的线性表

队头(Front):允许删除的一端,又称为队首。

队尾(Rear): 允许插入的一端。

先进入队列的元素必然先离开队列,即先进先出(First In First Out)简称FIFO

1顺序队列

用数组来实现队列,可以将队首放在数组下标为0的位置。

数据结构重点知识点复习——第三章 栈与队列_第16张图片

2循环队列

把数组“掰弯”,形成一个环。Rear指针到了下标为4的位置还能继续指回到下标为0的地方。这样首尾相连的顺序存储的队列就叫循环队列

入队:rear=(rear+1)%MaxSize

出队:front=(front+1)%MaxSize

循环队列的操作
1入队

数据结构重点知识点复习——第三章 栈与队列_第17张图片

2出队

数据结构重点知识点复习——第三章 栈与队列_第18张图片

那如何分辨队列是空还是满呢?
方法一:

设置标志位tag,当tag=0且rear等于front时为队列空即当tag=1且rear等于front时为队列满即tag==0&&front==rear。当tag=1且rear等于front时为队列满即tag==1&&front==rear。

每次删除成功操作时,都令tag=0;所以tag==1&&front==rear队空

每次插入成功操作时。都令tag=1;tag==1&&front==rear 队满

数据结构重点知识点复习——第三章 栈与队列_第19张图片

方法二:

我们把front=rear仅作为队空的判定条件。当队列满的时候,令数组中仍然保留一个空余单元。我们认为这种情况就是队列满了。

数据结构重点知识点复习——第三章 栈与队列_第20张图片

3链式队列

队列的链式存储结构,其实就是线性表的单链表,只不过需要加点限制,只能表尾插入元素,表头删除元素。

数据结构重点知识点复习——第三章 栈与队列_第21张图片

为了方便操作,我们分别设置队头指针和队尾指针,队头指针指向头结点,队尾指针指向尾结点。

数据结构重点知识点复习——第三章 栈与队列_第22张图片

链式队列的操作
1入队

1.入队:我们知道队列只能从队尾插入元素,队头删除元素。于是入队就是在队尾指针进行插入结点操作。链队的插入操作和单链表的插入操作是一致的。

数据结构重点知识点复习——第三章 栈与队列_第23张图片

2出队

2.出队:出队就是头结点的后继结点出队,然后将头结点的后继改为它后面的结点。

数据结构重点知识点复习——第三章 栈与队列_第24张图片

4双端队列

双端队列是指允许两端都可以进行入队和出队操作的队列

数据结构重点知识点复习——第三章 栈与队列_第25张图片

你可能感兴趣的:(数据结构重点总结,数据结构,算法,c语言)