研究数据结构从三个方向进行 :
逻辑结构
存储结构
操作
简单来说 数据结构有哪些? 存储方式上:链表形式,数组,
数据结构分别为逻辑结构、存储结构(物理结构)
逻辑结构又分为四类基本结构:
集合、线性结构、树形结构、图状结构(网状结构)
集合、线性结构??这两项有何区别??
集合:是数据元素之间的关系是 同属于一个集合
线性结构: 除了第一个和最后一个元素 ,其他每个元素都只有一个 直接前驱和一个直接后继。
树形结构: 每个元素若有之前 前驱,只能有一个。但可以有多个后继元素。
图形结构: 每个元素可以有多个直接前驱,和多个直接后继。
存储结构(物理结构)又分为 顺序存储结构 和 链式存储结构,索引方式,散列。
索引方式,散列方式 是一种什么形式 ?
顺序方式: 元素按照某种顺序存放到一片 连续的存储单元。元素之间的逻辑关系是通过他们存储位置来体现。
优势:
1 元素直接的逻辑关系是通过他们存储位置体现,因此存储密度高。
2 可以快速确定元素的存储位置,从而能够实现对元素的随机,快速访问。
缺点:
1 插入删除操作,可能会引起大量元素的移动,实现效率低。
2 存储空间需要预先支配,如果定的太大会造成空间浪费
链式存储: 逻辑上相邻的元素,物理位置上未必相邻,元素之间的逻辑关系由附加的指针域表示。
优势:
1 元素直接的关系通过指针域表示,因此插入 删除不会引起大量元素的移动。效率高。
2 可动态的申请 和 释放节点空间,所使用的存储空间大小 与实际存储的数据元素 保存 一致。
索引方式: 在存储数据元素的同时 再建立一个索引 表,索引表中的每一行 称为 索引 项 ,一般情况是 (关键字,地址)
关键字:能够唯一标识一个数据元素 的一个或多个 数据项。
优势: 检索速度快
缺点:
1 增加索引表会占用存储空间
2 在插入或者删除数据元素是需要修改 索引表,因而会话费时间。
散列方式: 数据元素的存储地址 是用他的关键字 计算出来的,散列方式又称为哈希表,凑杂表
优点: 检索,插入 ,删除操作很快。
缺点: 如果使用了不好的 散列函数 ,可能会出现 存储单元冲突,为了解决冲突需要额外的时间和空间 开销。
数据运算:
常用的数据运算 有 插入 查找 删除 排序 更新。
什么是算法????: 是对解决问题方法的 精确描述 ,用来完成 某个特定任务的有限步骤序列 。
算法的基本特征:
1: 有穷性,一个算法必须在执行 有穷步之后将结束,而且每一步都必须在又穷时间内结束。
2: 确定性,算法中每一个指令 必须有确切的含义,且无二义性。
3: 可行性, 算法中描述的所有操作都可以让已实现的 基本运算执行 有限次 完成,
4: 输入
5 : 输出
算法的评价 :
1 算法的时间复制度: 根据算法 编写出来的程序 在计算机上运行时 所消耗的时间 。
2 算法的空间复制度: 根据算法 编写出来的程序在 计算机上运行时 所需要的 存储空间 的大小。
数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构
数组 (Array): 由一组 相同的数据 元素 构成的有限集合。 各元素之间 有顺序 关系。
在程序设计中,为了处理方便,
把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
栈 (Stack): 只能在一端 插入和删除的 线性 表。 后进先出 last in first out =lifo
是只能在某一端插入和删除的 特殊 线性表。它按照 后进先出 的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,
需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
队列 (Queue): 只能在一端 插入 和另一端 删除 的 线性表 。先进先出的原则 first in first out =fifo
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列中没有元素时,称为空队列。
链表 (Linked List):
是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
树 (Tree)
是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。
(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
图 (Graph):
图是由结点的有穷集合V和边的集合E组成。
其中,为了与树形结构加以区别,在图结构中常常将结点称为 顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
堆 (Heap):
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 ??
散列表 (Hash):
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
编程过程中如何选择 数据结构?