仅为学习记录~
数据结构与算法
- 数据结构的概述
- 数据结构的概念
- 线性表
- 顺序存储结构(顺序表)
- 链式存储结构(链表)
- 单链表
- 结点结构
- 循环链表
- 双向链表
- 队列与栈
- 队列
- 栈
- 数组
- 数与二叉树
- 数与二叉树
- 二叉树遍历
- 堆
- 图
- 算法概述
- 算法的概念
- 算法的特性
- 复杂度
- 排序算法的总结
数据结构的概述
数据结构的概念
数据结构是指数据对象的集合,以及元素之间的相互关系和构造方法
数据结构分为逻辑结构和物理结构
逻辑结构:元素之间的关系
物理结构:元素之间存储的形式
逻辑结构分为线性结构和非线性结构
线性结构:有单一的前驱、单一的后继
特点:元素呈线性排列
非线性结构:前驱和后继都不是单一的
线性表
线性表:有限个元素构成的序列,是一种简单的数据结构(a1,a2,…,an)
线性表常见的两种存储结构
顺序存储结构(顺序表)
在物理上相邻的块一个一个的存储
链式存储结构(链表)
存放的数据块在物理位置上不是连续的
单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据
结点结构
┌───┬───┐
│data │next │
└───┴───┘
data域–存放结点值的数据域
next域–存放结点的直接后继的地址(位置)的指针域(链域)
链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。
循环链表
循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。
双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点
队列与栈
队列
队列是一种先进先出的结构
栈
栈是一种特殊的线性表,插入和删除元素只在栈顶进行
I表示入栈,O表示出栈
数组
数组是一系列相同类型的元素组成的集合
数组类型 | 存储地址计算 |
一维数组a[n] | a[i]的存储地址为:a+i*len |
二维数组a[m][n] | a[i][j]的存储地址为(按行存储):a+(i*n+j)*len |
二维数组a[m][n] | a[i][j]的存储地址为(按列存储):a+(j*m+i)*len |
数与二叉树
数与二叉树
结点的度:某个结点子树的个数
树的高度:数的层次
叶子结点:又称为终端节点,指度为0的节点
分支结点:又称为内部节点,指度不为0的节点
父结点:父结点是相对的
二叉树遍历
前序遍历:根序-左序-右序
中序遍历:左序-根序-右序
后序遍历:右序-左序-根序
层次遍历:
二叉树进行层次遍历:首先搜索第1层根节点A,然后搜索第2层,从左向右B、C,再搜索第3层,从左向右D、E、F,再搜索第4层G
堆
堆是计算机科学中一类特殊的数据结构的统称
堆通常是一个可以被看做一棵树的数组对象
堆的性质:堆中某个结点的值总是不大于或不小于其父结点的值,堆总是一棵完全二叉树
分为大顶堆和小顶堆,大(小)顶堆要求父元素大于等于(小于等于)其左右子元素
图
算法概述
算法的概念
对特定问题求解的一种描述,是指定的有序序列
算法的特性
有穷性:一个算法必须在有穷的时间内固定完成
可行性:在有限的时间内能够实现
确定性:指令算法中,每一个指令不存在二义性(每个都有确定含义)
输入:一个算法可以有0-n个输入
输出:算法一定有1-n个输出
复杂度
时间复杂度:是指程序运行从开始到结束所需要的时间
分析时间复杂度的方式是取一种对于所研究问题的基本运算操作,以该操作的重复次数对于该操作运算时间的度量
空间复杂度:算法在运行过程中,需要占用临时空间大小的度量,一般只考虑在运行过程中局部变量分配的存储空间大小
排序算法的总结