绪论
数据(data)——所有能被计算机识别、存储和处理的符号的集合(包括数字、字符、声音、图像等信息 )。
数据元素(data element)——是数据的基本单位,具有完整确定的实际意义(又称元素、结点,顶点、记录等)。
数据项(Data item)——构成数据元素的项目。是具有独立含义的最小标识单位(又称字段、域、属性 等)。
三者之间的关系:数据 > 数据元素 > 数据项
第一章:线性表
线性结构的定义:若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
特点① 只有一个首结点和尾结点;
特点② 除首尾结点外,其他结点只有一个直接前驱和一个直接后继。
线性结构包括:线性表、堆栈、队列、字符串、数组等
其中最典型,最常用的是------线性表
第二章:链表
头指针:指向链表中第一个结点的指针
首元结点:链表中存储第一个元素的节点
头结点:在链表的首元结点之前附设的一个结点,数据域内只放空表标志和表长等信息(此节点不计入链表长度值)
第三章:栈和队列
栈(先进后出)
定义:是仅在表尾进行插入删除操作的线性表。
表头称为栈底:base
表尾称为栈顶:top
入栈:插入元素到栈顶的操作
出栈:从栈顶删除元素的操作
顺序栈不存在的条件:S.base==NULL
顺序栈为空的条件:S.base==S.top
顺序栈满的条件:S.top-S.base==栈S的空间个数
队列(先进先出)
定义:只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表(尾部插入,头部删除)
表头称为队头:front
表尾称为队尾:rear
入队:插入元素到队尾的操作
出队:从队头删除元素的操作
顺序队为空的条件:Q.rear==Q.front
顺序队满的条件:Q.rear-Q.front==队Q的空间个数
假溢出:在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空余位置。
解决方法:采用循环队列
循环队列的新问题:在循环队列中,空队特征是front=rear;队满时的特征也是front=rear;判决条件出现二义性
解决办法
1.使用一个计数器记录队列中元素的个数
2.加设标志位,满时置1,空时置0,则可识别当前front=rear属于何种情况
3.人为浪费一个单元,则队满特征可改为front=(rear+1)%队列容量
第四章:数组和广义表
数组
定义:数组是特殊的线性表,也可以说是线性表的拓展;特殊在于:表中的元素可以是同类型的复杂结构
一维数组:表中每个元素都是同类型的单一结构
二维数组:表中的每个元素都是同类型的复杂结构(数组的数组)
构成:由一组名字相同,下标不同的变量构成
一维数组的特点:1个下标,ai 是ai+1的直接前驱
二维数组的特点:2个下表,每个元素ai,j受到两个关系(行关系和列关系)的约束
n维数组的特点:n个下标,每个元素受到n个关系约束,一个n维数组可以看成是由若干个n-1维数组组成的线性表
广义表
定义:广义表是线性表的推广,也称为列表
规定:
1.用小写字母表示原子类型,用大写字母表示列表
2.第一个元素是表头,而其余元素组成的表称为表尾
注意:任何一个非空表,表头可能是原子,也可能是列表,但表尾一定是列表
两种特殊的操作:
GetHead ( L) ——取表头(可能是原子或列表)
初始条件:广义表L存在。
操作结果:取广义表L的头。
GetTail ( L ) ——取表尾(一定是列表)
初始条件:广义表L存在。
操作结果:取广义表L的尾。