数据结构研究的是数据的逻辑结构、存储结构及其操作
数据:计算机处理的对象(数据)已不再单纯是数值,更多的是一组数据
逻辑结构:
1对1 -----线性关系
1对多-----树形关系(1对2---二叉树)
多对多----网状关系 ----图
存储结构:
顺序存储---顺序表
链式存储---链表
索引存储
hash存储---hash表
操作:
创建、插入、显示、删除、修改、查找
顺序表的特点
(1)顺序并且连续存储、访问方便
(2)大小固定
(3)表满不能存、表空不能取
优点:访问方便
缺点:插入、删除不方便都需要移动元素
链表的特点
- 申请的空间可以不连续
- 访问不方便
- 插入、删除不需要移动元素
1.2 相关概念
链表的分类:
有没有头结点:
带头结点的链表、不带头结点的链表
指针域是双向还是单向:
单向链表、双向链表
尾结点是否指向头结点:
循环链表、不循环链表
特殊的线性表
1.栈
1.栈的特征
(1).栈是限制在一端(栈顶)进行插入操作和删除操作的线性表
(2).先入后出
2.队列
1.队列的特征
(1).队列允许在两端进行操作,在队尾插入,在队头删除
(2).先进先出
1.树
1.什么是树
树(Tree)是 n(n≥0)个节点的有限集合T,它满足两个条件 :
(1)有且仅有一个特定的称为根(Root)的节点;
(2).其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树(Subtree)。
1.度数
一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数
2.深度
节点的层数等于父节点的层数加一,根节点的层数定义为一。树中节点层数的最大值称为该树的高度或深度
3.边数
一个节点系列k1,k2, ……,ki,ki+1, ……,kj,并满足ki是ki+1的父节点,就称为一条从k1到kj的路径,路径的长度为j-1,即路径中的边数
2.二叉树
1.什么是二叉树
二叉树的定义 :
二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成
2.二叉树的性质
(1).二叉树第i(i≥1)层上的节点最多为2i-1个。
(2).深度为k(k≥1)的二叉树最多有2k-1个节点。
(3).在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一。
3.二叉树的遍历:
前序遍历:先遍历根节点,然后遍历左子树,最后是右子树。
中序遍历:先遍历左子树,然后遍历根节点,最后是右子树。
后序遍历:先遍历左子树,然后遍历右子树,最后是根节点。
.赫夫曼树:
结点的带权路径长度指的是从树根到该结点的路径长度和结点上权的乘积。树的带权路径长度是指所有叶子节点的带权路径长度之和,记作 WPL 。WPL最小的二叉树就是最优二叉树,又称为赫夫曼树
算法
什么是算法
算法(Algorithm)是一个有穷规则(或语句、指令)的有序集合
算法:解决问题的方法步骤
算法的特性
(1) 有穷性 —— 算法执行的步骤(或规则)是有限的;
(2) 确定性 —— 每个计算步骤无二义性;
(3) 可行性 —— 每个计算步骤能够在有限的时间内完成;
(4) 输入 —— 算法有一个或多个外部输入;
(5) 输出 —— 算法有一个或多个输出。
查找算法
1.顺序查找
2.二分查找
3.哈希查找
排序算法
1.选择排序
2.插入排序
3.快速排序(递归排序)