推荐学习参考书籍:
实体课本: 1.严蔚敏、吴伟民编著的教材(都是伪算法)
实现代码: 高一凡
数据结构概述
定义:
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)以及为此在基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的操作,这个相应的操作叫做算法。
数据结构=个体+个体的关系
算法=对存储数据的操作
算法
解题的方法和标准
衡量算法的标准
1.时间复杂度:大概程序要执行的次数,而非执行的时间。
2.空间复杂度:算法执行过程中大概所占用的最大的内存。
3.难易程度:是否易于阅读理解
4.健壮性:
数据结构的地位:
数据结构是软件中最核心的课程
程序=数据的存储+数据的操作+可以被计算机执行的语言
预备知识
指针
指针的重要性:
指针是C语言的灵魂
定义:
地址:
地址就是内存单元的编号
从0开始的非负整数
范围: 0--FFFFFFFF (0--4G-1)
指针:
指针就是地址,地址就是指针。
指针变量时存放内存单元地址的变量
指针的本质是一个操作受限的非负整数。
分类:
1.基本类型的指针
2.指针和数组的关系
结构体
为什么会出现结构体?
为了表示一些复杂的数据,而普通的基本类型变量无法表示
什么叫结构体?
结构体是用户根据实际需要自己定义的复合数据类型。
如何使用结构体?
两种方式:
struct Student st={1000,"zhangsan",20};
struct Student *pst=&st;
方法一:
st.sid
方法二:
pst->sid
表示pst所指向的结构体变量中的sid这个成员
注意事项
1.结构体变量不能加减乘除,但可以相互赋值。
2.普通结构体变量和结构体指针变量作为函数传参的问题
动态内存的分配和释放
模块一: 线性结构(把所有的结点用一根直线穿起来。)
连续存储[数组]
1.什么叫数组
元素类型相同,大小相等
2.数组的优缺点
离散存储[链表]
线性结构的两种常见应用之一 栈
线性结构的两种常见应用之二 队列
专题:递归
1.1+2+3+4+.....100的和
2.求阶乘
3.汉诺塔
4.走迷宫
模块二:非线性结构
树
图
模块三: 查找和排序
折半查找
排序:
冒泡
插入
选择
快速排序
递归排序
Java中容器和数据结构相关知识
Iterator 接口
Map
哈希表