一、顺序表和链表
1.数据结构
结构: 结构是指元素之间的关系
逻辑结构: 元素之间的相互关系称为数据逻辑结构,可划分为线性结构和非线性结构。
常用的线性结构有:线性表,栈,队列、数组和串。
常见的非线性结构有:二位数组,多维数组,广义表,树(二叉树),图。
存储结构: 数据元素及元素之间的存储形式称为存储结构,可分为顺序存储和链接存储两种基本方式。
顺序存储时,相邻数据元素的存放地址也相邻;要求内存中可用存储单元地址必须时连续的
链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放节点值,另一部分存储表示结点间关系的指针。
2.顺序表
存储结构: 顺序存储结构(顺序表)、链式存储结构(链表)。
顺序存储方式: 内存是连续分配的,并且是静态分配的,在使用前需要分配固定大小的空间。
操作:
- 访问底i个元素
- 查找是否含有某值
- 删除第i个元素
- 第i个元素前插入某值
3.链表
存储结构: 顺序存储结构(顺序表)、链式存储结构(链表)。
- 链表存储方式: 链表的内存是不连续的,前一个元素存储地址的下一个地址中存储的不一定是下一个元素。访问某节点应找上一个节点提供的地址,每一结点有一指针变量存放下一节点的地址。数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表中的每一个元素称为结点,每个结点是一个结构体变量,它有若干成员组成:
数据部分: 可有若干项(整、实、字符、结构体)
指针变量: 通常具有指向自身结构体类型的指针变量,存放下一结点的地址,最后一个结点的地址部分为NULL
操作:
- 访问底i个元素
- 查找是否含有某值
- 删除第i个元素
- 第i个元素前插入某值
其它概念:
尾节点:最后一个有效结点
首节点:第一个有效结点
头结点:第一个有效节点之前的那个结点,存放链表首地址
头指针:指向头结点的指针变量
尾结点:指向尾节点的指针变量
特点:
- n个结点离散分布,彼此通过指针相联系
- 除头结点和尾节点外,每个结点只有一个前驱节点和一个后继节点。头结点没有前驱节点,尾结点没有后继结点。
- 头结点并不存放有效数据,只存放链表首地址。其数据类型同首节点类型一样。
- 加头结点的目的是方便对链表操作,比如在链表头部镜像结点的删除、插入。
4.顺序表存储和链式存储性能对比
二、数组
1.数组的概念
数组是由n个数据类型相同的元素所组成的序列
2.一维数组
3.二维数组
三、字符串
字符串
由字符(数字、字母、下划线等)构成的一维数组
概念:
空串: 无任何字符的字符串
空白串: 由空白符号构成的串
子串: 串中任意连续的字符组成的子序列称为该串的子串
非平凡子串: 非空且不同于S字符串本身
串的模式匹配: 模式串的主串中首次出现的位置
字符串的比较: 从左到右去ASCII码值进行比较
四、矩阵
1.特殊矩阵
2.非特殊矩阵
3.矩阵的乘法
五、栈和队列
六、树
1.树的基本概念
2.二叉树的划分
3.二叉树的特性
七、树的遍历
1.二叉树的遍历方式
2.由前序、中序遍历序列构造二叉树
由前序序列为ABHFDECG;中序序列为HBEDFAGC构造二叉树:
八、特殊二叉树
1.二叉查找树
2.哈夫曼树
假如有一组权值50,20,30,40,10,请尝试构造哈夫曼树
九、图
1.图的分类
完全图
- 在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图
- 在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图
连通图
- 连通图:指任意两个顶点之间都有一个路径相连
2.图的转换
1.无向图转邻接矩阵
2.有向图转邻接矩阵
十、算法特性和复杂度
算法的基本特性
有穷性:执行有穷步之后结束
确定性:算法中每一条指令都必须有确切的含义,不能含糊不清
输入输出数目约定:输入(>=0),输出(>=1)
有效性(可行性):算法的每个步骤都有效执行并能得到确定的结果
例如a=0,b/a就是无效的
算法评价指标:
正确性:正确实现算法功能,最重要的指标
友好性:具有良好的使用性
可读性:可读的、可以理解的,方便分析、修改和移植
健壮性:对不合理的数据或非法的操作能进行检查、纠正
效率:对计算机的消耗,包括计算机内存和运行时间的消耗
十一、查找
1.顺序查找
2.二分查找
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(arr[mid] > target) {
right = mid - 1;
} else if(arr[mid] < target){
left = mid + 1;
} else {
return mid;
}
}
return -1;
}
3.散列表查找
线性探查法
拉链法
十二、排序
排序概念和分类
1.直接插入排序
2.希尔(Shell)排序
3.冒泡排序
4.快速排序
5.直接选择排序
6.堆排序
7.归并排序