数据结构的基本认识

数据结构

1.数据

数据是信息的载体,是能够输入到计算系统中被计算机识别,处理,存储处理的符合总称;

数据是一个集合,是由多个数据元素组成,每一个数据元素又是由多个数据项组成;
数据不再是包括整型,浮点类型的数值类型;
包括字符,声音,图像,视频等非数值类问题;

2.数据的逻辑结构

线性结构:一对一。线性表,栈,队列
树形结构:1对多,1对2.二叉树。
图状结构:多对多;

3.数据的存储结构

3.1顺序存储

将数据结构中各元素按照其逻辑结构顺序存放在存储器一片连续的存储空间中 ;如图下所示

顺序存储:按照数据元素的逻辑关系在计算机内存中连续存储;内存中开辟的连续空间,

3.2链式存储

链式存储(Linked Storage) :将数据结构中各元素分布到存储器的不同点,用地址(或链指针)方式建立它们之间的联系,由此得到的存储结构为链式存储结构。如表L=(a, a2, ....的链式存储结构如图

顺序存储:按照数据元素的逻辑关系在计算机内存中连续存储;内存中开辟的连续空间,

3.3索引存储

(3)索引存储( Indexed Storage):: 在存储数据的同时,建立一个附加的索引表,即索引存储结构-数据文件+索引表。


索引存储:数据元素的某个数据项和地址之间的关系;建立一张索引表,增加查找的效
率;

3.4哈希存储


哈希存储:通过构建数据元素里面的某个数据项作为主key,和存储地址之间构建一个映射
关系,然后通过主key就能快速找到数据元素;
3.5小结:


顺序存储结构------------线性表,顺序表;(数据元素在内存中连续存储,连续且大小固
定)
链式存储结构------------链表,(不连续的内存空间,内存大小不固定)
索引存储结构--------------索引表,数据文件
散列存储结构-------------hash表,(项目的重点)通过数据元素中的关键字段和地址构
建函数映射关系。

4.操作

具有逻辑结构的数据元素按照某种存储结构进行存放,计算机能够识别它,然后对它进行
相关的运算,运算不再单纯的加减乘除
1.创建                                 2.插入                                        3.查找
4.删除                                    5.销毁                                        6.遍历

5.顺序表

逻辑结构:1对1的线性结构;元素除了首和尾,中间的元素,有且只有一个前驱和一个后
继;
存储结构:按顺序进行存储。内存中连续且大小固定;

5.1特点

顺序并且连续的存储
大小固定,表满不能存新数据,表空的不能删除数据
操作:增删改查;插入和删除元素不是太方便,需要移动元素。访问和查找比较方便

6.链表

将线性表L = (a0....an)逻辑关系1对1的;L数据对象,是多个数据元素,数据元素之间的
逻辑关系是1对1的;选择以链式存储的存储结构,存入到计算机中。能够进行增删改查操
作;
数据对象:L = (a0....an)
逻辑结构;1对1
存储结构:链式存储
链式存储:定义一个节点,包含两部分内容:数据域和指针域
数据域:存放数据元素
指针域:存放下一个节点的首地址

 

6.1特点

(1)存储可以不连续,大小可以不固定
(2)实际的物理内存是不连续,逻辑上是1对1的关系保留了,是连续的。
(3)查找不太方便;没有索引;插入和删除比较方便;

7.栈

栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一-端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。
特点:后进先出(LIFO) 

7.1栈的创建

逻辑结构:是1对1的;元素是一个接着一个存放
存储结构:有顺序存储,顺序栈。
有链式存储, 链式栈

操作:只限定在一端进行操作;栈顶;添加元素,删除元素,只能通过在栈顶进行;

7.2链式栈

插入操作和删除操作均在链表头部进行,链表尾部就是
栈底,栈项指针就是头指针。
插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈项指针就是头指针。

特点:
插入和删除的操作只能在链表的表头进行;
栈顶:链表的表头;
栈底:链表的尾部;

8.队列

 先进先出
在队尾是可以进行插入元素,入队
在队头是可以进行删除元素,出队

逻辑结构:1对1
存储结构:顺序存储 顺序队列 链式存储 链式队列

8.1顺序队的特点

存储结构:顺序存储 顺序队列
顺序且连续,大小固定

顺序存储:队满 队空

8.2循环队列的初始值和队空条件

 

9.树

树的概念
>树(Tree) 是n (n≥0) 个节点的有限集合T,它满足两个
条件:
1)有且仅有一个特定的称为根(Root) 的节点;
2)其余的节点可以分为m (m≥0)个互不相交的有限集合T1、T2、..... Tm,其中每一一个集合又是一棵树,并称为其根的子树( Subtree)。
表示方法:
树形表示法、目录表示法。

根结点:A,没有双亲;有孩子;B,C,D
中间结点:既有双亲,又有孩子;B,C,D,E,H,
叶子结点:有双亲,但是没有孩子;K,L,F,G,M,I,J,G
森林: 多个根,独立的互不相交的树的集合;

9.1度数

结点的度数:
一个结点的子树的个数称为该结点的度数;
A结点:B,C,D三个子树,A结点的度数,就是3
叶子结点:度数总是为0;
树的度数:
树中的各结点的度数的最大值。

9.2深度

层数:根结点的层数定义为第一层;

树的深度:是树中结点层数的最大值为这颗树的深度;

9.3二叉树

二叉树的定义:二叉树 (Binary Tree)是n (n20) 个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。二叉树与普通有序树不同,二叉树严格区分左孩子和右孩子,即使只有一个子节点也要区分左右。

注意:

严格区分左子树和右子树
树中的每个结点,度数不会超过2;0,1,2
空集
逻辑结构:1对2

9.3.1二叉树的性质

二叉树第i (i2l) 层上的节点最多为2-1个。深度为k (k21) 的二叉树最多有2k-1个节点。
在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一 。总节点数为各类节点之和: n=no+n1+n2总节点数为所有子节点数加一: n=n1+ 2*n2+ 1
故得: no=n2+ 1 ;

9.3.2满二叉树

深度为k有2^k -1 个节点的二叉树
满二叉树中,只有度数为2的节点和度数为0的节点;且度数为0 的结点是在最大层数
的那一层;
结点个数 2^K-1

9.3.3完全二叉树

对一个具有n个结点的二叉树按层编号,如果编号为i的结点与同样深度的满二叉树的
编号i的结点,在二叉树中的位置完全相同,就是完全二叉树;

9.4二叉树的三种遍历方式

遍历:沿某条搜索路径周游二叉树,对树中的每一个节点访问一次且仅访问一次。
“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。

遍历:对每一个结点访问一次;
线性结构:遍历的路径只有一条
非线性结构:二叉树有两个后继,遍历的路径是不唯一的;

9.4.1三种遍历方式

前序遍历:根左右(先访问树根,再访问左子树,最后访问右子树;根左右)
中序遍历:左根右(先访问左子树,再访问树根,最后访问右子树;左根右)
后序遍历:左右根(先访问左子树,再访问右子树,最后访问树根;左右根)

9.5赫夫曼树

9.5.1定义

赫夫曼(Hufiman)树,又称最优树,是带权路径长度最短的树,有着广泛的应用;
从树中一个结点到另外一个结点的分支构成一条路径,分支的数目称为路径的长度。

树的路径长度是指从树根到每个结点的路径长度之和
进一步推广,考虑带权的结点。结点的带权路径长度指的是从树根到
该结点的路径长度和结点上权的乘积。树的带权路径长度是指所有叶子节点的带权路径长度之和,记作WPL。WPL最小的二叉树就是最优二叉树,又称为赫夫曼树。

9.5.2赫夫曼树的生成

9.5算法

9.5.1算法的定义


算法(Algorithm) 是一个有穷规则(或语包、指令)的有序集合。它确定了解决某一问题的一个运算序列。对于问题的初始输入,通过算法有限步的运行,产生-一个或多个输出。

9.5.2算法与数据结构的关系

算法的设计:依据数据元素之间的逻辑结构 1对1,1对二,1对多
算法的实现:依赖于数据元素的存储结构(顺序存储/链式存储/散列存储)

9.5.3算法的特性


(1)有穷性  一    算法执行的步骤(或规则)是有限的;
(2)确定性  一    每 个计算步骤无二义性;
(3)可行性  一    每个计算步骤能够在有限的时间内完成;
(4) 输入     一    算法有一个或多个外部输入;
(5)输出     一      算法有 一个或多个输出。

9.6查找

9.6.1定义

数据元素由多个数据项组成;
查找:基于数据元素中的多个数据项,然后选其中一个数据项,如果能够通过这个数
据项,就唯一查找到这个数据元素。例如,依据学号找到学生的记录信息,学号,主
key
精确匹配:次key. 姓名,年龄。

9.6.2查找的分类

顺序查找

 折半查找

分块查找

 

Hash查找

 

 


 

 


 

 

 

 


 


 

 

 


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值