数据结构基本概念
数据结构是指数据对象及其相互关系和构造方法,一个数据结构S可以用一个二元组表示为:S=(D,R).其中,D是数据结构中数据的非空有限集合,R是定义在D上的关系的非空有限集合。更详细一点也可以表示成ADT(Abstract data type,抽象数据类型)。ADT定义了数据对象,数据关系,以及数据操作。在数据结构中,结点及结点之间的关系成为数据的逻辑结构,数据在计算机中的存储形式成为数据的存储结构。
数据结构的分类
按逻辑结构划分:线性结构(表、栈、队列)、非线性结构(树形结构、图结构)。
1.1线性表
概念:线性表是最简单、最常用的一种数据结构,由相同类型的结点组成的有限序列。
线性表的存储:
1.顺序存储:最简单的存储方式。将线性表的结点依次存储在一个数组中。该方法的优点是能随机存取线性表中的任何一个结点,缺点主要有两个:一个是数组的大小通常是固定的,不利于任意增加或减少线性表的结点个数;二是插入和删除线性表的结点时,要移动数组中的其他元素,操作复杂。
2.链接存储:用链表来存储线性表。最简单的是单向链表。链表的每个结点不但要存储线性表结点信息,还要用一个域存储其后继结点指针。单向链表用指针来体现线性表中结点的先后次序。该方法的优点是线性表中每个结点的实际位置是任意的,给插入和删除操作带来了方便。缺点主要有两个:一是每个结点增加了一个后继指针成分,要花费更多的空间。二是不便随机访问线性表的任一节点。
1.2栈
概念:栈是一种特殊的线性表,只允许在同一端进行插入和删除操作。允许插入和删除的一端称为栈顶,另一端称为栈底。具有后进先出的特点。
栈的存储:
1.顺序存储:为了指明栈顶位置,需要一个地址变量TOP指出栈顶结点在数组中的下标。
2.链接存储:用链表来实现的栈称为链接栈。链表的首结点就是栈顶指针TOP,TOP为NULL的链表是空栈。
1.3队列
概念:队列是一种特殊的线性表,只允许在一端进行插入,另一端进行删除操作。允许删除的操作的一端称为队首,另一端称为队尾。具有先进先出的特征。
队列的存储:
1.顺序存储:可以用顺序存储线性表来表示队列,为了指明当前执行出队运算的队首位置,需要一个指针变量HEAD,为了指明入队操作的队尾,需要一个指针变量TAIL。为了解决多次进行入队和出队操作后队列数组前端空着,后端空间用完的问题,一种方法是把队列中的结点移到数组的前段,修改头指针和尾指针。另一种更好的解决办法是采用循环队列。
循环队列就是将实现队列的数组的a[n]的第一个元素a[0]和最后一个元素a[n-1]连接起来。队列空的判断条件是head=tail(head赶上tail),对队满的判断条件是head=tail+1(tail赶上head).
2.链接存储:用链表实现的队列称为链接队列。队列头指针head指向队首结点,尾指针tail指向队尾结点,队尾结点的链接指针指向null。当head为null时,队列为空。