数据结构第一次小结
数据结构小结
一.思维导图
二. 重要概念的笔记
1.算法是对特定问题求解步骤的一种描述,它是指令的有限序列
2.线性表是具有相同特性的数据元素的一个有限序列
3.顺序表是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。
4.顺序表的优点:1:存储密度高;2:元素可以随机读取;3:存储位置可以简单的使用公式来表示
5.链表的优点:1:适合随机的插入和删除操作;2:存储空间大小不需要提前设定;3:可以进行动态存储
6.单链表中,增加头结点的目的是(方便运算的实现)
7.栈是一种只能在一端进行插入或删除操作的线性表
8.队列简称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表达另一端进行删除操作
9.循环队列队空的判断
r->rear==r->front;
队满的判断
(r->rear+1)%r->maxsize==f->front;
三. 疑难问题及解决方案
1.迷宫问题
比较不理解怎么用栈去解决迷宫的问题以及为什么用队列可以寻找到最短路径。
解决:
用栈解决
将抽象的东西在日常生活中找例子,用栈解决迷宫问题就相当于在路上遇到A有两种走法,先去AB方向又遇到两条路,于是先走C,不通,退回到B走D不通,退回A走另一条路,找到了出口。于是发现这种算法需要不断的尝试,退回,于是便有了思路。
思路:从上一个节点开始,任意找下一个能走的点,当找不到能走的点时,退回上一个点寻找是否有其他方向的点。
使用栈存储当前路径。后进先出,方便回退到上一个点 。
while (di<4 && !find) //找相邻可走方块(i1,j1)
{
di++;
switch(di)
{
case 0:i1=i-1;j1=j;break;
case 1:i1=i;j1=j+1;break;
case 2:i1=i+1;j1=j;break;
case 3:i1=i;j1=j-1;break;
}
if (mg[i1][j1]==0) find=true;
//找到一个相邻可走方块,设置find为真
}
通过这段代码改变探索的方向
其算法为创建一个空栈,先将入口位置进栈。当栈不空时循环:获取栈顶元素,寻找下一个可走的相邻方块,如果找不到可走的相邻方块,说明当前位置是死胡同,进行回溯 。
使用栈比较通俗易懂,但找到的不一定是最短的路径。
用队列解决
找到了这张图。
思路: 从一个节点开始,寻找所有接下来能继续走的点,继续不断寻找,直到找到出口。
创建一个空队列,将起点1放入队列,然后1只有一条路可走,因此1出列2进列,到3入列后由于有两条路可走,3出列4、5入列;随后先走4的方向4出列6入列,再5出列7入列,此时6、7在队列中,6又有了两个方向,此时6出列,8、9入列,此时队列中为7\8\9,以此规律依次类推,直到找到出口。
这种方法需要一个表来找路径,比较麻烦,但是找到的路径是最短路径。
原文地址:https://www.cnblogs.com/song0820/p/12582023.html
- “微信身份证”来了!下月起全国推广!
- silverlight3的"伪"3D续--图片横向轮换
- 从MapX到MapXtreme2004[5]-自定义工具
- 米市的热潮来袭?三枚域名超六位数美金交易
- 微信新出了逆天功能,或许你用得上
- 网站系统架构梳理-解决高负载高并发
- silverlight 相册雏型
- Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
- 一台服务器多实例mysql做主从复制
- spring AOP日志管理
- vue-route+webpack部署单页路由项目,访问刷新出现404问题
- UNIX 高手的 10 个习惯
- linux下截取给定路径中的目录部分
- 一年坎坷也曾怀疑自己,如今五冠在手的柯洁将再战AI
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 除了FastJson,你也应该了解一下Jackson(一)
- JavaScript性能优化总结
- Spring Boot2+Resilience4j实现容错之Bulkhead
- [译]高性能缓存库Caffeine介绍及实践
- 云原生时代高性能Java框架—Quarkus(一)
- 云原生时代高性能Java框架—Quarkus(二)
- 使用TypeScript积累自己的类库
- 在Egret项目中使用protobuf
- JavaScript原型与继承
- 当TKE遇上Coding, 业务如何实现快速迭
- cocos creator 1.x透明渐变效果实现
- Cocos Creator 2.x透明渐变效果实现
- Themeleaf通过ajax局部更新
- ubuntu下利用expect实现screen多窗口开机运行
- hetzner服务器购买和安装debian系统