数据结构与算法

1.1 算法

定义
  • 是指对解题方案准确完整描述
    简单的说,就是解决问题的步骤
基本特征
  • 可行性
  • 确定性
  • 有穷性
  • 拥有足够的情报
基本要素
  • 对数据对象的运算和操作
  • 算法的控制结构,即运算或操作间的秩序
算法复杂度

体现计算所需的计算机资源的多少。
计算资源:时间空间(存储器)

  • 时间复杂度:执行算法所需要的计算工作量
    计算工作量,即基本运算次数(问题规模)
  • 空间复杂度:执行这个算法所需要的内容空间
    输入数据、程序本身及算法执行过程所需的存储空间

1.2数据结构的基本概念

数据结构定义
  • 数据集合中个数据元素之间固有的逻辑关系,即数据的逻辑结构
  • 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构
  • 对各种数据结构进行的运算
数据是需要处理的数据元素的集合;一般来讲,这些数据元素,具有某个共同的特征
结构就是关系,是集合中的各个数据元素之间存在的某种关系(或联系)。线性结构、树形结构、网状结构、集合。

数据的前后件关系是数据元素之间的最基本关系。

数据的逻辑结构反映数据元素之间逻辑关系(即前后件关系)的数据结构
数据的存储空间又称数据的物理结构。是数据的逻辑结构在计算机存储空间中的存放方式。最主要的两种:顺序存储结构链式存储结构

线性结构与非线性结构

1.3 线性表及其顺序存储结构

线性表是n(n≥0)个数据元素构成的有限序列

1.4 栈和队列

栈:先进后出
队列:先进先出

  • 栈和一般线性表的实现方法类似,通常也可以采用顺序方法和链接方法链实现
  • 队列的排头指针front总是指向队头元素前一个位置,而队尾指针rear总是指向队尾元素
  • 循环队列是队列的一种顺序存储结构;满队和空队时,front = rear(S=0 为空; S=1 为非空)

1.5 线性链表

线性链表式存储结构的基本单位称为存储节点,包含数据域指针域
单链表:
双向链表:左指针(Llink,存放前件地址)、右指针(Rlink,存放后件地址)

  • 各数据节点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致
  • 数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可

可利用栈:空闲的节点组织成一个带链的栈

1.6 树与二叉树

树(Tree)是一种简单的非线性结构;通常采用链式存储。

术语描述
父节点(根)
子节点和叶子节点
一个节点所拥有的的后件个数称为该节点的度,所有节点中最大的度称为数的树的度
深度定义一棵树的根节点所在层次为1,其他节点所在的层次等于他的父节点所在层次加1。树的最大层次称为数的深度。
子数以某节点的一个子节点为根构成的数,称为该节点的一棵子树。
二叉树一个有限的节点集合,该集合或者为空,或者由一个根节点及两棵互不相交的左右二叉子树所组成。有n个节点时,深度至少为[int(log(2,n))+1]
满二叉树除最后一层外,每层的所有节点都有两个子节点的二叉树。在第i层上有2^(i-1) 个节点;深度为K的,整棵树有2^K-1个节点
完全二叉树除最后一层外,每层的所有节点数均达到最大值,在最后一层上只缺少右边的若干节点。具有n个节点时,深度为[int(log(2,n))+1]
ax非完全二叉树
二叉树遍历

一般先遍历左子树,再遍历右子树

  • 前序遍历:访问根节点→前序遍历左子树→前序遍历右子树
  • 中序遍历:前序遍历左子树→访问根节点→前序遍历右子树
  • 后序遍历:前序遍历左子树→前序遍历右子树→访问根节点

1.7 查找技术

  • 顺序查找
  • 二分法查找,也称拆半查找,一种高效的查找方法;(满足:1.顺序存储结构;2.线性表是有序表);时间复杂度=log(2,n),n为序列长度;

1.8 排序技术

  • 交换排序法

  • 冒泡排序法Bubble Sort,最简单的一种;两两相邻数据元素进行比较和交换,不断消去逆序,直到所有元素都有序为止

  • 快速排序法Quick Sort,一次扫描,智能确保最大或最小元素移到了正确位置

  • 插入类排序法

  • 简单插入排序法,每次将一个排序元素,按照其元素值的大小插入到前面已经排好序的子表中的适当位置,直到所有元素插入完成为止;效率与冒泡排序法相同;最坏情况下时间复杂度=n^2,n为序列长度

  • 希尔排序法Shell Sort,又称“缩小增量排序”,也是一种插入类排序方法,单在时间效率上较简单掺入排序有较大的改进;最坏情况下时间复杂度=n^1.5,n为序列长度

  • 选择类排序法

  • 简单选择排序法Simple Selection Sort,从n个待排序数列选择最小元素,将该元素与第一个元素交换,再进行n-1个待排序数列

  • 排序法,将n个元素按顺序组成一棵完全二叉树,大根堆、小根堆;将根节点与左右子树比较调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值