跟咱们平常工做和生活同样,计算机程序也组织它们的数据的时候,它们作这些事情的方式使用线性表、栈及词典,等等。这些数据组织的方式称为抽象数据类型(ADT)。前端
一个抽象数据类型(abstract data type),即ADT是描述一个数据集合以及在这个数据集合上的操做的说明。每一个ADT里都存放的是什么数据,以及在这些数据上应该作些什么操做。可是ADT并不指明如何存放数据或者如何实现操做。所以,对ADT的谈论能够独立于任何程序设计语言。相反,数据结构(data structure)是ADT在程序设计语言中的一种实现。后端
数组
在程序设计中,为了处理方便, 把具备
相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
栈(stack)
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,须要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
队列(queue)
一种特殊的线性表,它只容许在表的前端(front)进行删除操做,而在表的后端(rear)进行插入操做。进行插入操做的端称为队尾,进行删除操做的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。
链表
是一种物理存储单元上非连续、非顺序的存储结构,它既能够表示线性结构,也能够用于表示非线性结构,数据元素的逻辑顺序是经过链表中的指针连接次序实现的。链表由一系列结点(链表中每个元素称为结点)组成,结点能够在运行时动态生成。每一个结点包括两个部分:一个是存储数据元素的数据域,另外一个是存储下一个结点地址的指针域。
树
是包含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组成。其中,为了与树形结构加以区别,在图结构中经常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具备相邻关系。
堆
在计算机科学中,堆是一种特殊的树形数据结构,每一个结点都有一个值。一般咱们所说的堆的数据结构,是指二叉堆。堆的特色是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
散列表(词典)
若结构中存在关键字和K相等的记录,则一定在f(K)的存储位置上。由此,不需比较即可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想创建的表为散列表。