考研数据结构基础chapter3栈队列数组

目录

一、栈

1.定义(informal)

2.术语

3.特点

4.基本操作

二、顺序栈

1.定义

2.基本操作

(1)初始化

(2)入栈

(3)出栈

(4)读取栈顶元素

(5)判空

(6)判满

3.区别S.top==0

(1)初始化

(2)入栈

(3)出栈

(4)读取栈顶元素

(5)判空

(6)判满

三、共享栈

​编辑

1.定义

2.操作

(1)定义结构

(2)初始化

(3)判满

四、链栈

1.定义

2.操作(带头结点)

(1)初始化

(2)入栈

(3)出栈

(4)读取栈顶元素

(5)判空

3.区别:不带头结点

(1)初始化

(2)入栈

(3)出栈

五、队列(循环队列)

1.定义

2.术语

3.特点

4.操作

(1)初始化

(2)入队

(3)出队

(4)读取队头元素

(5)判空

(6)判满

(7)计算队列长度

5.不想浪费一个空间

(1)size

(2)tag

6.区别:初始化时rear指向的ele位置

六、链队列

1.定义

2.基本操作(带头结点)

(1)初始化

(2)入队

(3)出队

(4)获取队头元素

(5)判空

七、双端队列

1.定义

2.受限分类

(1)入队受限

(2)出队受限

3.考点

八、栈应用

1.括号匹配

2.表达式求值

(1)前中后缀表达式介绍

(2)中<->后

1)中->后

(3)中<->前

(4)后缀求值

(5)中缀求值

(6)理解

3.递归

九、队列应用(后期详细介绍)

1.遍历

(1)树的层次遍历

(2)图的广度优先遍历

2.OS

(1)cpu资源分配

(2)打印数据缓冲区

十、矩阵的压缩存储

1.arr的存储结构

(1)一维arr

(2)二维arr

1)行优先存储

2)列优先存储

3)示意图

2.特殊矩阵

(1)对称矩阵

(2)三角矩阵

(3)三对角矩阵

(4)稀疏矩阵

1)三元组线性表

2)十字链表法(chap6详解)


一、栈

1.定义(informal)

操作受限的线性表,只能在一段进行插入删除(入栈出栈)

2.术语

栈顶、栈底、空栈

3.特点

后进先出LIFO

4.基本操作

创建销毁、入栈出栈、读取栈顶元素、判空判满

二、顺序栈

1.定义

利用顺序表实现

2.基本操作

(1)初始化

top=-1

(2)入栈

top先++再赋值

(3)出栈

先存值再--

(4)读取栈顶元素

出栈操作,top不动

(5)判空

top==-1

(6)判满

top == MaxSize - 1

3.区别S.top==0

(1)初始化

top==0

(2)入栈

先入栈后++

(3)出栈

先--后存值

(4)读取栈顶元素

(5)判空

top==0

(6)判满

top == MaxSize

三、共享栈

1.定义

两个逻辑栈共享一个存储栈空间

2.操作

(1)定义结构

顺序表+两个指向

(2)初始化

两个指针,top0指向最左面ele前面,top1指向最右面ele后面

(3)判满

top0 + 1 == top1

四、链栈

1.定义

单链表实现,操作受限,只能进行头插、头删

2.操作(带头结点)

(1)初始化

申请头结点空间,赋null

(2)入栈

将元素e入栈LS,头插

(3)出栈

出栈,存储元素为e,头删

(4)读取栈顶元素

(5)判空

LS->next == NULL

3.区别:不带头结点

理解:无头结点,头指针直接指向第一个结点,因为是头指针,so不能使用next属性

(1)初始化

头指针==null

(2)入栈

分两种情况,case1空栈,让入栈的结点next指向null,头指针赋值成该指针;case2非空,指针1指向第一个结点,新结点指向第一个结点,将头指针指向新结点

(3)出栈

指针指向第一个结点,next指向L,L就指向第二个结点了,free第一个结点

五、队列(循环队列)

1.定义

操作受限的顺序表,头部入队尾部出队,静态arr实现。

实现顺序表之后,发现这个队列只能使用一次,so使用取模操作可以使front和rear回到开头,在逻辑上变成了一个循环队列

2.术语

队头、队尾、空队列

3.特点

先进先出FIFO

4.操作

(1)初始化

两个指向,赋值为0,表示都在队尾(此时队尾也是队头)

(2)入队

将元素e入队

rear下标处赋值,之后rear++

变成循环队列之后入队,rear= (rear+1)%MaxSize

(3)出队

出队,元素存在e中,front++

变成循环队列之后出队,front= (front+1)%MaxSize

(4)读取队头元素

元素存在e中,front不变

(5)判空

front==rear

(6)判满

错误:rear==MaxSize

reason:当队满了之后rear==MaxSize,但出队之后rear不动即rear==MaxSize依然成立,但是不是满的

解决办法:取模,到了最大就回归0点

so:逻辑上变成了循环队列

so当(rear+1)%MaxSize ==front即可,此时会浪费一个空间,否则判满与判空条件相同

(7)计算队列长度

(rear+MaxSize-front)%MaxSize

attn:链队不能这么计算

5.不想浪费一个空间

(1)size

1)思路

初始化的时候设置size属性,记录即时arr的长度,即判断条件变成了arr长度和MaxSize的比较

2)操作
        a)定义
        b)初始化
        c)入队
        d)出队
        e)判空
        f)判满
        g)输出队列

(2)tag

1)思路

初始化的时候设置tag属性,进行删除操作tag赋值0,插入操作tag赋值为1,因为仅有插入才有可能满队,so满的条件为front == rear && tag == 1

2)操作
        a)定义
        b)初始化
        c)入队
        d)出队
        e)判空
        f)判满
        g)输出队列

6.区别:初始化时rear指向的ele位置

rear可以指向0,也可以指向-1,即第一个结点后面

六、链队列

1.定义

两端受限的单链表实现

2.基本操作(带头结点)

(1)初始化

(2)入队

(3)出队

(4)获取队头元素

(5)判空

七、双端队列

1.定义

两端都可以进行入队出队的队列

2.受限分类

(1)入队受限

一端可以入队出队,另一端只能出队

(2)出队受限

一端可以入队出队,另一端只能入队

3.考点

选择题,给待输入的ele,问(不)可能输出的序列

八、栈应用

此部分要求会手算和模拟机算,会伪代码

1.括号匹配

判断使用括号是否合法,判断步骤:

step1:从左->右依次扫描, 左括号入栈

step2:if是右括号,弹栈,比对是否成对,成对继续扫描,不成对直接false

step3:if到最后右括号栈为null,or到了最后栈不为null,则为false

2.表达式求值

(1)前中后缀表达式介绍

要求会手写计算,相互转换并求值

(2)中<->后

1)中->后

手算计算步骤:

从左向右扫描,找到最先可以运算的符号,将两侧数字提出,运算符放最后,运算完之后看作一个大的数字

“左优先“原则:if有左右同时可以计算的运算符,则优先计算位于左面的运算符

eg:

可用序号检验:顺序相同

2)后->中

步骤:

利用栈,从左->右,将数字入栈,遇到运算符弹栈,先弹出的放右边,运算之后入栈

eg:

(3)中<->前

1)中->前

步骤:(与中->后顺序相反)

从右->左遍历,依次找运算符的先后顺序,符号放在运算符前

右优先原则

eg:

2)前->中

步骤:

利用栈,从右向左扫描,将数字入栈,遇到运算符弹栈,先弹出的放左边,运算之后入栈

eg:

(4)后缀求值

按照后->中步骤走

(5)中缀求值

中->后+后计算

(6)理解

中->后/前目的就是去掉括号,因为括号会使计算机不知道先后顺序,so计算中缀表达式就是先去括号再还原回来的过程,只是在还原过程中计算机知道了计算的顺序,顺便就把式子计算了

3.递归

在递归中,最后调用的函数会最先返回值回来,so在递归的应用中使用到了栈

九、队列应用(后期详细介绍)

1.遍历

(1)树的层次遍历

将树按行从左->右遍历

(2)图的广度优先遍历

2.OS

先来先服务(FCFS)

(1)cpu资源分配

当打开多个app时,按照先后顺序,先打开的先cpu处理

(2)打印数据缓冲区

当使用打印机时,OS会在主机上创建打印数据的缓冲区,在打印文件时将待打印的文件放入打印数据缓冲区

十、矩阵的压缩存储

目的:节省内存空间

考点:出选择题,矩阵->一维arr中k与i,j的关系

1.arr的存储结构

(1)一维arr

(2)二维arr

1)行优先存储

一行一行存

2)列优先存储

一列一列村

3)示意图

数组下标一般从0开始

2.特殊矩阵

主要考察矩阵->一维arr,k i j 之间的关系

做题步骤:

step1:画示意图,确定是按照行优先还是列优先

step2:确定每行or每列的个数

step3:sum

(1)对称矩阵

ai,j == aj,i

上三角矩阵or下三角矩阵

(2)三角矩阵

上三角矩阵or下三角矩阵,其他地方都是一个常数

(3)三对角矩阵

|i-j|>1的地方全为0,so一行最多3个ele

(4)稀疏矩阵

矩阵中有的地方有ele,有的地方没有

so用三列表or十字链表表示

1)三元组线性表

下标行、列、值

2)十字链表法(chap6详解)

矩阵一般从0开始

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blue_blooded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值