数据结构与算法-数据结构
概念:
数据结构是一种存储和组织数据的方法,可以有效地使用它。
数据结构是任何程序或软件的构建块(基础块)。
术语:
就数据结构而言,使用以下术语:
- 数据:数据可以定义为基本值或值集合,例如,学生的姓名和ID,成绩等就是学生的数据。
- 组项:具有从属数据项的数据项称为组项,例如,学生的姓名由名字和姓氏组成。
- 记录:记录可以定义为各种数据项的集合,例如,如果以学生实体为例,那么学生的名称,地址,课程和标记可以组合在一起形成学生的记录。
- 文件:文件是一种类型实体的各种记录的集合,例如,如果类中有60名员工,则相关文件中将有20条记录,其中每条记录包含有关每个员工的数据。
- 属性和实体:实体表示某些对象的类。它包含各种属性。每个属性表示该实体的特定属性。
- 字段:字段是表示实体属性的单个基本信息单元。
用途:
随着应用程序变得越来越复杂,数据量日益增加,可能会出现以下问题:
- 处理器速度:要处理非常大的数据,需要高速处理,但随着数据逐日增长到每个实体数十亿个文件,处理器可能无法处理大量数据。
- 数据搜索:假设商店的库存大小是100860个商品,如果应用程序需要搜索某一特定商品,则每次需要遍历100860个商品,这会导致搜索过程变慢。
- 大量请求:如果成千上万的用户在Web服务器上同时搜索数据,在此过程中可能在短时会有一个非常大请求而导致服务器处理不了。
为了解决上述问题,使用数据结构。组织数据以形成数据结构,使得不需要搜索所有项目并且可以立即搜索所需数据。
分类:
操作:
遍历:每个数据结构都包含一组数据元素。遍历数据结构表示访问数据结构的每个元素,以便执行某些特定操作,如搜索或排序。示例 :如果需要计算学生在6个不同科目中获得的分数的平均值,需要遍历完整的分数数组并计算总和,然后将总分数除以科目数,即6, 最后得到平均值。
插入:插入是在任何位置将元素添加到数据结构的过程。如果数据结构的大小是n,那么只能在n-1个数据元素之间插入元素。
删除:从数据结构中删除元素的过程称为删除。 可以在任何随机位置删除数据结构中的元素。如果要从空数据结构中删除元素,则会发生下溢。
搜索:在数据结构中查找元素位置的过程称为搜索。 有两种算法可以执行搜索,即线性搜索和二进制搜索。
排序:按特定顺序排列数据结构的过程称为排序。 有许多算法可用于执行排序,例如,插入排序,选择排序,冒泡排序等。
合并:当两个列表分别为大小为M和N的列表A和列表B时,相似类型的元素,连接产生第三个列表,列表C的大小(M + N),则此过程称为合并。
数据结构分类
1.线性数据结构
如果数据结构的所有元素按线性顺序排列,则称为线性数据结构。
在线性数据结构中,元素以非分层方式存储,除了第一个和最后一个元素,它的每个元素具有后继元素和前导元素。
线性数据结构的类型有:数组;链表;堆栈;队列
- 数组:数组是类似数据项的集合,每个数据项称为数组的元素。元素的数据类型可以是任何有效的数据类型,如char,int,float或者double。数组的元素共享相同的变量名,但是每个元素都有一个不同的索引号,这些索引号也称为下标。数组可以是一维的,二维的或者多维的。
- 链表:链表是一种线性数据结构,用于维护内存中的列表。它可以看作存储在非连续内存位置的节点集合。链表中每个节点都包含指向其相邻节点的指针。
- 队列:队列是一个线性列表,它的元素只能在一端插入(添加),也被称为后端,而只在另一端出队(删除),也被称为前端。
- 堆栈:堆栈是一个线性列表,其中只允许在一端插入和删除,称为顶部。堆栈是一种抽象的数据类型(ADT),可以在大多数编程语言中实现。它被命名为堆栈,因为它的行为类似于真实世界的的堆栈,例如,成堆的板块或卡片组等,只能在最顶面操作。
2.非线性数据结构
非线性数据结构不形成序列,即每个项目或元素以非线性排列与两个或更多个其他项目连接。 数据元素不按顺序结构排列。
非线性数据结构的类型有:树;图
- 树:树是多级数据结构,其元素之间具有层次关系,树的元素也称为节点。层次中最底层的节点称为叶节点,而最顶层节点称为根节点。 每个节点都包含指向相邻节点的指针。
树数据结构基于节点之间的父子关系。 除了叶节点之外,树中的每个节点可以具有多个子节点,而除了根节点之外,每个节点可以具有最多一个父节点。
树可以分为许多类别:
-
无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
-
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
-
二叉树:每个节点最多含有两个子树的树称为二叉树;二叉树又分为
- 完全二叉树:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
- 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
- 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;
- 图:图可以定义为由称为边缘的链接连接的元素集(由顶点表示)的图表示。 图不同于树,图可以有循环而树不能具有循环。
数据结构优缺点汇总