数据结构与算法基础

一、顺序表和链表

1.数据结构

结构: 结构是指元素之间的关系
逻辑结构: 元素之间的相互关系称为数据逻辑结构,可划分为线性结构和非线性结构。
常用的线性结构有:线性表,栈,队列、数组和串。
常见的非线性结构有:二位数组,多维数组,广义表,树(二叉树),图。
存储结构: 数据元素及元素之间的存储形式称为存储结构,可分为顺序存储和链接存储两种基本方式。
顺序存储时,相邻数据元素的存放地址也相邻;要求内存中可用存储单元地址必须时连续的
链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放节点值,另一部分存储表示结点间关系的指针。

2.顺序表

存储结构: 顺序存储结构(顺序表)、链式存储结构(链表)。
顺序存储方式: 内存是连续分配的,并且是静态分配的,在使用前需要分配固定大小的空间。
image.png
操作:

  1. 访问底i个元素
  2. 查找是否含有某值
  3. 删除第i个元素
  4. 第i个元素前插入某值

3.链表

存储结构: 顺序存储结构(顺序表)、链式存储结构(链表)。

  • 链表存储方式: 链表的内存是不连续的,前一个元素存储地址的下一个地址中存储的不一定是下一个元素。访问某节点应找上一个节点提供的地址,每一结点有一指针变量存放下一节点的地址。数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

image.png
链表中的每一个元素称为结点,每个结点是一个结构体变量,它有若干成员组成:
数据部分: 可有若干项(整、实、字符、结构体)
指针变量: 通常具有指向自身结构体类型的指针变量,存放下一结点的地址,最后一个结点的地址部分为NULL
image.png
操作:

  1. 访问底i个元素
  2. 查找是否含有某值
  3. 删除第i个元素
  4. 第i个元素前插入某值

其它概念:
尾节点:最后一个有效结点
首节点:第一个有效结点
头结点:第一个有效节点之前的那个结点,存放链表首地址
头指针:指向头结点的指针变量
尾结点:指向尾节点的指针变量
image.png
特点:

  1. n个结点离散分布,彼此通过指针相联系
  2. 除头结点和尾节点外,每个结点只有一个前驱节点和一个后继节点。头结点没有前驱节点,尾结点没有后继结点。
  3. 头结点并不存放有效数据,只存放链表首地址。其数据类型同首节点类型一样。
  4. 加头结点的目的是方便对链表操作,比如在链表头部镜像结点的删除、插入。

image.png

4.顺序表存储和链式存储性能对比

image.png

二、数组

1.数组的概念

数组是由n个数据类型相同的元素所组成的序列
image.png

2.一维数组

image.png

3.二维数组

image.png
image.png
image.png

三、字符串

字符串

由字符(数字、字母、下划线等)构成的一维数组
概念:
空串: 无任何字符的字符串
空白串: 由空白符号构成的串
子串: 串中任意连续的字符组成的子序列称为该串的子串
非平凡子串: 非空且不同于S字符串本身
串的模式匹配: 模式串的主串中首次出现的位置
字符串的比较: 从左到右去ASCII码值进行比较

四、矩阵

1.特殊矩阵

image.png
image.png

2.非特殊矩阵

image.png

3.矩阵的乘法

image.png

五、栈和队列

image.png

六、树

1.树的基本概念

image.png

2.二叉树的划分

image.png

3.二叉树的特性

image.png

七、树的遍历

1.二叉树的遍历方式

image.png

2.由前序、中序遍历序列构造二叉树

由前序序列为ABHFDECG;中序序列为HBEDFAGC构造二叉树:
image.png

八、特殊二叉树

1.二叉查找树

image.png
image.png

2.哈夫曼树

image.png
假如有一组权值50,20,30,40,10,请尝试构造哈夫曼树
image.png

九、图

1.图的分类

完全图

  • 在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图
  • 在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图

连通图

  • 连通图:指任意两个顶点之间都有一个路径相连

image.png

2.图的转换

1.无向图转邻接矩阵

image.png

2.有向图转邻接矩阵

image.png
image.png

十、算法特性和复杂度

算法的基本特性
有穷性:执行有穷步之后结束
确定性:算法中每一条指令都必须有确切的含义,不能含糊不清
输入输出数目约定:输入(>=0),输出(>=1)
有效性(可行性):算法的每个步骤都有效执行并能得到确定的结果
例如a=0,b/a就是无效的
算法评价指标:
正确性:正确实现算法功能,最重要的指标
友好性:具有良好的使用性
可读性:可读的、可以理解的,方便分析、修改和移植
健壮性:对不合理的数据或非法的操作能进行检查、纠正
效率:对计算机的消耗,包括计算机内存和运行时间的消耗
image.png

十一、查找

1.顺序查找

image.png

2.二分查找

image.png
image.png

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.散列表查找

线性探查法

image.png

拉链法

image.png

十二、排序

排序概念和分类

image.png

1.直接插入排序

image.png

2.希尔(Shell)排序

image.png

3.冒泡排序

image.png

4.快速排序

image.png

5.直接选择排序

image.png

6.堆排序

image.png

7.归并排序

image.png
image.png

8.基数排序

image.png

排序总结

image.png

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值