数据结构第一次小结

数据结构小结

一.思维导图

二. 重要概念的笔记

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为真
        }

通过这段代码改变探索的方向

其算法为创建一个空栈,先将入口位置进栈。当栈不空时循环:获取栈顶元素,寻找下一个可走的相邻方块,如果找不到可走的相邻方块,说明当前位置是死胡同,进行回溯 。

使用栈比较通俗易懂,但找到的不一定是最短的路径。

用队列解决

img

找到了这张图。

思路: 从一个节点开始,寻找所有接下来能继续走的点,继续不断寻找,直到找到出口。

创建一个空队列,将起点1放入队列,然后1只有一条路可走,因此1出列2进列,到3入列后由于有两条路可走,3出列4、5入列;随后先走4的方向4出列6入列,再5出列7入列,此时6、7在队列中,6又有了两个方向,此时6出列,8、9入列,此时队列中为7\8\9,以此规律依次类推,直到找到出口。

这种方法需要一个表来找路径,比较麻烦,但是找到的路径是最短路径。

posted @ 2020-03-27 15:59  宋林涛  阅读(121)  评论(0编辑  收藏  举报