数据结构期末复习精要.pptx

数据结构期末复习精要

(a1, a2, … ai-1,ai, ai+1 ,…, an) ;线性表的抽象数据类型的定义: ADT List { 数据对象:D={ai | ai∈Elemset, i=1, 2,…, n, n≥0} 数据关系:R1={ai-1, ai | ai-1, ai∈D, i=2, …, n} 基本操作: InitList(L) 操作结果:构造一个空的线性表L DestroyList(L) 初始条件:线性表已存在 操作结果:销毁线性表L ;2.2.1 顺序表的表示;线性表顺序存储特点;线性表的顺序存储结构示意图;例4:一个一维数组M,下标的范围是0到9,每个数组元素用相邻的5个字节存储。存储器按字节编址,设存储数组元素M[0]的第一个字节的地址是98,则M[3]的第一个字节的地址是;线性表的顺序存储结构定义(静态);本节小结;2.3 线性表的链式表示和实现;2.3.1 链表的表示 用一组任意的存储单元存储线性表的数据元素 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素 每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息 结点 数据域:元素本身信息 指针域:指示直接后继的存储位置;与链式存储有关的术语:;1. 单链表的建立和输出;1. 单链表的建立和输出;将全局变量及函数提前说明:;// 尾插法建立单链表 LinkList s; head=(LinkList)malloc(m); p=head; s=(LinkList)malloc(m); // 为第i个结点开新空间! s-data=‘A’+i-1; // 为第i个结点值域赋值 p-next=s; // 让p指向的结点的指针域指向新结点s p=s; // 让指针变量p改为指向新结点s(p后移) p-next=NULL; return head; //head是全局变量,此语句可省;LinkList build() //字母链表的生成。带头结点的单链表;3. 单链表的插入;问3:在什么情况下用顺序表比链表好?;3.1 栈(Stack) 栈的定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO);例1:对于一个栈,给出输入项A、B、C,如果输入项序列由ABC组成,试给出所有可能的输出序列。;例2:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗?12345的输出呢?;例4:计算机系2001年考研题;3.4 队列 3.4.1 抽象数据类型队列的定义 队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。 例如:排队购物。操作系统中的作业排队。先进入队列的成员总是先离开队列。因此队列亦称作先进先出(First In First Out)的线性表,简称FIFO表。 当队列中没有元素时称为空队列。在空队列中依次加入元素a1,a2,…an之后,a1是队头元素,an是队尾元素。显然退出队列的次序也只能是a1,a2,…an ,也就是说队列的修改是依先进先出的原则进行的。; 为克服上述假上溢现象,可以将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量,存储在其中的队列称为循环队列(Circular Queue)。; 由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时头尾指针均相等。 因此,我们无法通过Q.front=Q.rear来判断队列“空”还是“满”。;解决此问题的方法至少有两种: (1)另设一个布尔变量以区别队列的空和满; (2)少用一个元素的空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空) ;;头尾指针的加1都是在循环意义下加1;队空:Q.front ==Q. rear 队满:Q.front ==(Q.rear + 1) % maxSize 入队:Q.rear = (Q.rear + 1) % maxSize 出队:Q.front = (front + 1) % maxSize; 求队长:(Q.rear - Q.front + maxSize)%maxSize; 4.1 串类型的定义; 子串、主串:串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。通常将子串在主串中首次出现时的该子串的首字符对应的

文档评论(0)

1亿VIP精品文档

相关文档