01-简述
1. 几个经典算法题
字符串匹配
- KMP算法(部分匹配表)
汉诺塔
- 分治算法
八皇后
- 回溯算法
马踏棋盘(骑士周游)
- 图的深度优先遍历算法(DFS) + 贪心算法优化
2. 数据结构和算法的关系
2.1 数据结构
- 解决存储问题
- 把现实生活中大量而复杂的问题以特定的数据类型(事物)和特定的存储结构(事物的关系)保存到存储器中
- 数据的存储 = 数据的存储 + 数据关系的存储
2.2 算法
- 在存储结构的基础上实现某个功能而执行的操作,这个相应的操作也叫做 [算法] // 算法就是对数据的操作
广义 | 狭义 上的算法
狭义的算法:与数据的存储方式密切相关
广义的算法:与数据的存储方式无关
2.3 关系
- 程序 = 数据结构 + 算法
? ? ? ? = 数据的存储 + 数据的操作 + 可以被计算机执行的语言 - 数据结构是算法的基础
3. 看几个实际编程中遇到的问题
- 试写出用单链表表示的字符串类及字符串结点类的定义,并依次实现它的构造函数、以及计算串长度、串赋值、判断两串相等、求子串、两串连接、求子串在串中位置等7个成员函数
- 数据结构:单链表
- 五子棋程序:如何判断游戏的输赢,并可以完成 {存盘退出} 和 {继续上局} 的功能
- 存盘退出:棋盘 → 二维数组 → 稀疏数组 → 写入文件
- 继续上局:读取文件 → 稀疏数组 → 二维数组 → 棋盘
- 约瑟夫问题(丢手帕问题):设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列
- 用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表(单向环形链表),然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束
- 修路问题
- 最小生成树
- 普利姆算法
- 最短路径问题
- 图
- 弗洛伊德算法
4. 数据结构
4.1 线性结构
有2种不同的存储结构
顺序存储结构:逻辑关系上相邻的两个元素在物理位置上也相邻
链式存储结构:一组任意的存储单元(离散存储);数据元素之间通过指针连接(即每个数据除了存储其本身的信息外,还需要存储一个指向其直接后继的指针 )
- 常见的线性结构
- 数组
- 链表
- 队列
- 栈
4.2 非线性结构
- 二维数组、多维数组
- 广义表
- 树 结构
- 图 结构
相关推荐
mingyunxiaohai 2020-07-19
lwnylslwnyls 2020-11-06
ATenhong 2020-10-15
bluewelkin 2020-09-16
chensen 2020-11-14
yanzhelee 2020-10-13
佛系程序员J 2020-10-10
guojin0 2020-10-08
佛系程序员J 2020-10-08
wwzaqw 2020-09-04
zhongdaowendao 2020-09-02
favouriter 2020-08-18
奎因amp华洛 2020-08-15
一青年 2020-08-13
千锋 2020-08-10
nangongyanya 2020-08-09
dongxurr 2020-08-08
明天你好 2020-08-03
kyelu 2020-08-03