线性表:一个线性表是n个元素的有限序列。一个数据元素可以由若干个数据项(item)组成,每组数据称为一个记录(record),含有大量记录的线性表又称一个文件(file)。
优点:逻辑上相连,物理上也相连。因此可以随机存取任一元素。
缺点:在作插入或删除操作时,需要移动大量数据。
线性链表:对于元素Ai来说,除了存储自身信息(数据域)外还存储了后继元素的信息(指针域)。这两部分信息组成Ai的存储映像,称为结点(node)。n个结点链接成一个链表,故称线性链表或单链表。
栈:栈是限定仅在表头进行插入和删除操作的线性表。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。(对头,队尾)
栈和队列区别:
栈,是一种先进后出的数据结构,
队列,是一种先进先出的数据结构,
栈,有一个指针,指向栈顶元素
队列,有两个指针,一个指向队尾,一个指向队首
树:树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。
(1)每个元素称为结点(node);
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。
二叉树:二叉树是每个结点最多有两个子树的有序树。通常根的子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在出度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
重要概念
(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
(3)深度——二叉树的层数,就是深度。
遍历:
先序遍历:首先访问根,再先序遍历左(右)子树,最后先序遍历右(左)子树
中序遍历:先中序遍历左(右)子树,再访问根,最后中序遍历右(左)子树
后序遍历:首先后序遍历左(右)子树,再后序遍历右(左)子树,最后访问根。
拓展:最优二叉树(赫夫曼树)