数据结构总览
2016-07-26 09:13
190 查看
数据结构总览
数据机构是指相互之间存在一种或者多种特定关系的数据元素的集合。数据结构包括三个组成成分:数据的逻辑结构、数据的存储结构、数据的运算结构。
数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构。包括:
1 集合结构 (数据结构中的元素同属一个集合)
2 线性结构(数据结构中的元素一对一的相互关系)
3 树形结构 (一对多的相互关系)
4 图形结构 (多对多的相互关系)
逻辑结构可形式化的定义为(D,R),D是数据元素的集合,R是D上关系的有限数据元素集合。例:设4个元素之间分别为A,B,C,D,那么,描述的数据结构可定义为:D={A,B,C,D},R={AB,BC,CD}。
数据的存储结构(物理结构):指数据的逻辑结构在计算机存储空间的存放形式。数据的物理结构是数据结构在在计算机中的表示,包括数据结构中元素的表示及元素间关系的表示。数据的存储结构包括:
1 顺序存储结构 (把逻辑上相邻的元素存储在物理位置相邻的存储单元中)
优点:随机存储任意元素;
缺点:插入、删除需大量移动元素;
2 链式存储结构 (把逻辑上相邻的元素存储在物理位置可相邻也可不相邻的存储单元中,借助指针来实现)
优点:插入、删除只需修改指针域即可;
缺点:不能随机存储元素;
3 索引存储结构 (除建立存储结点信息外,还建立附加的索引表来标识结点的地址)
4 散列存储结构 (根据结点的关键字直接计算出该结点的存储地址)
数据的存储结构实质是它的逻辑结构在计算机存储器中的实现。
数据的运算结构:算法的设计取决于逻辑结构,而算法的实现依赖于采用的存储结构。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新、排序等。这样设计到很多的算法问题。
不同的数据结构其操作集不同,但下列操作必不可少:
1 结构的生成;
2 结构的销毁;
3 在结构中查找满足规定条件的数据元素;
4 在结构中插入新的数据元素;
5 删除结构中已经存在的数据元素;
6 遍历操作;
抽象数据类型:一个数学模型以及定义在该模型上的一组操作。抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。抽象数据类型可用以下三元组表示:(D,S,P)。D是数据对象,S是D上的关系集,P是对D的基本操作集。
ADT抽象数据类型名{
数据对象:
数据关系:
基本操作:
}ADT抽象数据类型名
基本操作名(参数表){
初始条件:(初始条件描述)
操作结果:(操作结果描述)
}
一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
常用的数据结构:
数组
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别
栈
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。队列
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。链表
是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。树
是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:(1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。 (2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
图
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。堆
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。散列表
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)