第二章数据结构及其运算
- 格式:ppt
- 大小:1.21 MB
- 文档页数:49
第二章基本数据结构及其运算本章主要介绍计算机中常见的基本数据结构及其运算。
数据结构是计算机存储、组织和管理数据的方式,它对算法的设计和效率有很大影响。
基本数据结构包括线性表、栈、队列、树、图等,以及它们的各种运算。
1.线性表线性表是最简单、最常用的数据结构之一、线性表的定义是n个数据元素的有限序列:a1, a2, …, an。
其中,a1是第一个元素,an是最后一个元素。
线性表的特点是数据元素之间是一对一的关系,每个元素只有一个直接前驱和一个直接后继。
线性表的运算主要包括:-插入:在指定位置插入一个元素;-删除:删除指定位置上的元素;-查找:根据索引查找元素;-修改:根据索引修改元素的值;-遍历:依次访问线性表中的每个元素。
2.栈栈是一种特殊的线性表,具有“先进后出”(Last In First Out, LIFO)的特点。
在栈中,最后插入的元素是第一个被访问的元素,最先插入的元素是最后一个被访问的元素。
栈的运算主要包括:-入栈:将一个元素插入到栈的顶部;-出栈:从栈顶删除一个元素;-栈顶元素:查看栈顶的元素,不改变栈的内容。
栈的应用场景有很多,例如函数调用、表达式求值、迷宫求解等。
3.队列队列也是一种特殊的线性表,具有“先进先出”(First In First Out, FIFO)的特点。
在队列中,最先插入的元素是第一个被访问的元素,最后插入的元素是最后一个被访问的元素。
队列的运算主要包括:-入队:将一个元素插入到队列的末尾;-出队:从队列的头部删除一个元素;-队首元素:查看队列的头部元素,不改变队列的内容。
队列的应用场景有很多,例如任务调度、缓冲区管理、广度优先等。
4.树树是一种非线性的数据结构,它由n(n>=0)个节点组成的有限集合。
特点是每个节点最多有一个直接前驱和多个直接后继。
树的运算主要包括:-插入节点:在树中插入一个新节点;-删除节点:从树中删除一个指定节点;-查找节点:在树中查找一个指定节点;-遍历树:按照其中一种规则,依次访问树中的每个节点。
第二章数据结构及其运算考试要求:1.C的数据结构及其定义:基本类型,构造类型,指针类型,空类型2.C运算符的种类,运算优先级和结合性。
3.不同类型数据之间的转换与运算。
4.C表达式类型和求值规则:赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式。
0(整型) 1.2(实型) 244 1.414 …a‟(字符型)7070.5100 100 060 59.9Student1234561000 2 字节问:为什么要分数据类型?答:2. 不同的数据类型存储格式不同1. 不同的数据类型所实施的操作不同.第2.1节数据类型简单语句复合语句1. C的数据类型分为:基本类型,构造类型,指针类型,空类型。
2. 基本类型又包括:整型,字符型,实型(单精度型,双精度型),枚举型3. 构造类型又包括:数组类型,结构体类型和共用体类型。
C语言中的数据有常量和变量之分,但是它们都属于以上这些类型。
2.1.1 常量与变量1.常量28 168 5.1 3.14 ‘a’…y‟在程序运行中,其值不能被改变的量叫做常量。
常量可以划分为不同的类型,如12,0,-3为整型常量;4.6,-3.15为实型常量;‘a’,‟p‟为字符型常量。
也可以用一个标示符来代表一个常量。
如:#define pi 3.1415 符号常量#define afsj 1682变量area=2其值可以改变的量叫做变量。
一个变量应该有一个名字,在内存中占据一定的存储单元。
该存储单元中存放变量的值。
注意变量名和变量值。
变量名的命名规则和标示符的命名规则相同。
int a;(为a分配了一个存储单元)a=2;简单说标示符就是一个名字。
在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。
2.1.2 基本类型整型包括整形常量,整型变量。
整型常量就是整常数。
在C 中使用的整常数有:八进制,十六进制和十进制。
1. 整型整型常量1) 八进制整常数必须以0(零)开头,用0做八进制的前缀。
第二章基本数据结构及其运算一、单项选择题1.数据的基本单位是( B )A.数据B.数据元素C.数据项D.数据结构2.在数据结构中,构成数据元素的最小单位称为(D)A.字符B.关键字C.数据元素D.数据项3.数据在计算机内的存储形式称为数据的( D )A.算法描述B.数据类型C.逻辑结构D.物理结构4.数据的逻辑结构可分为(C)A.顺序结构和链式结构B.简单结构和复杂结构C.线性结构和非线性结构D.动态结构和静态结构5.顺序表中的每个元素占m个字节,第一个元素的存储地址为LOC(1),则任意1个元素i的地址为( B )A.LOC(1)+i*m B.LOC(1)+(i-1)*mC.LCO(1)+(i+1)*m D.(i-1)*m 6.线性表若采用链表存储,其(D)A.所有结点的地址必须是连续的B.部分结点的地址必须是连续的C.所有结点的地址一定不连续D.所有结点的地址连续、不连续都可以7.线性表在采用链式存储时,其地址( C )A.必须是连续的B.一定是不连续的C.连续不连续都可以D.部分是连续的8.下列不属于线性结构的是( C )。
A.单链表B.队列C.二叉树D.数组9.链表不具有的特点是( A)A.可随机访问任一元素B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与线性表的长度成正比10.数据结构反映了数据元素之间的结构关系,链表是一种( D)。
A.顺序存储线性表B.非顺序存储非线性表C.顺序存储非线性表D.非顺序存储线性表11.在单链表表示的线性表中,可以从( A )。
A.第一个结点访问到所有结点B.某个结点访问到所有结点C.某个结点访问到该结点的所有前趋结点D.最后一个结点访问到所有结点12.在一个单链表中,已知指针q所指向的结点是指针p所指向的结点的前驱结点,若在指针q和p所指向的两个结点之间插入指针s指向的结点,则执行( C )。
A.s->link=p->link; p->link=s;B.p->link=s->link; s->link=p;C.q->link=s; s->link=p;D.p->link=s; s->link=q;13.长度为n的顺序存储的线性表,设在任何位置上删除一个元素的概率相等,则删除一个元素时平均要移动的元素个数是(A)A.(n-1)/2 B.n/2 C.n-1D.n+114.设长度大于1带头结点的循环单链表head的尾结点由rear 指向,则head和rear满足关系(B)A.rear->link= =NULLB.rear= =head->linkC..rear->link= =headD.rear= =head15.在链式存储的线性表中,插入一个元素时(D)A.需要移动元素和修改指针B.不需要移动元素和修改指针C.需要移动元素,但不需要修改指针D.不需要移动元素,但需要修改指针16.设循环队列中有m个单元,队列满的条件是( A ) A.rear=front B.(rear+1)%m=frontC.rear%m=front D.rear+1=front17.栈和队列都是( C)。
系,是用户按使用需要建立的。
数据结构研究的内容研究数据结构的目的2.线性表的存储地址(续)3.线性表在顺序存储下的插入运算 3.3.3.线性表在顺序存储下的插入运算(续)线性表在顺序存储下的插入算法应用举例。
4.线性表在顺序存储下的删除运算 4.4.线性表在顺序存储下的删除运算(续) 4.线性表在顺序存储下的删除算法应用举例基本数据结构及其运算1.计算表达式“A+B*C-D/E”的值。
的变化。
与栈类似,在程序设计语言中,用一维数组作为队列的顺在循环队列结构中,当存储空间的最后一个位置已被使用而再要进行人队运算时,只要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。
存储空间划分的一个个占若干字节的小块。
结构如下图所示。
图所示。
存储结点分为两部分:一部分用于存储数据元素的值,称为数据域;另一部分用于存放下一个数据元素的存储序号个存储所示的逻辑状在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。
各数据元素之间的前后件关系是由各结点的指针域来指示的。
指向线性表中第一个结点的HEAD=NULL(或0)时称为空表。
基本数据结构及其运算一、线性链表的基本概念(续)在实际应用中,带链的栈可以用来收集计算机存储空间中2.带链的栈(续) 2.下图是带链的队列及其运算。
第二章基本数据结构及其运算线性链表及其运算一、线性链表的基本概念二、线性链表的基本运算中包含元素x的结点之前插入一个新元素b。
其插入过程如下:q->next=p中删除包含元素x的结点。
其删除过程如下:在线性链表中删除一个元素后,不需要移动表的数据元素,只需改变被删除元素所在结点的前一个结点的指针域即可。
另外,由于可利用栈是用于收集计算机中所有的空闲结点,因此,当从线性链表中删除一个元素后,该元素的存储结点就变为空闲,应将该空闲结点送回到可利用栈。
线性链表存在的结构示意图循环链表的优点在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点;而线性单链表则做不到这一点。
数据结构第⼆章学习⼩结⼀、数据结构第⼆章知识点2.1-2.32.1 线性表的定义与特点2.2 案例引⼊1.⼀元多项式的运算:顺序表2.稀疏多项式的运算:链式表3.图书信息管理系统:查找/插⼊/删除等操作2.3 线性表的类型定义ADT定义2.4 线性表的顺序表⽰与实现1.顺序存储结构(随机存取)2.基本操作实现算法:初始化/取值/查找/插⼊/删除3.补充:讨论时间复杂度O(n)和空间复杂度S(n),默认是最坏情况下插⼊,删除等操作时间复杂度都为O(n):查找第i个元素,时间复杂度为O(1);查找值为x时,时间复杂度为O(n)。
若顺序表长度很⼤,注意内存分配空间是否⾜够2.5 线性表的链式表⽰和实现1.链式存储结构(顺序存取)2..基本操作实现算法:创建/初始化/取值/查找/插⼊/删除(头插法,尾插法)3.循环链表(带头尾指针,只带尾指针),双向链表4.补充程序退出时回收空间(链表/结点)创建头结点⽅便删除/插⼊等操作指针作为形参,若修改了指针的直接空间,要加&。
若是间接空间,可以不加&。
2.6-2.92.6顺序表和链表的⽐较顺序表适⽤于长度变化不⼤,插⼊删除操作较少链表适⽤于长度变化较⼤,插⼊删除操作较多2.7 线性表的应⽤线性表合并(书)有序表合并(书)线性表或有序表求交集的ADT定义ADT List{数据对象: D={ai I ai∈ElemSet, i=1, 2, ..., n, n>=0}数据关系: R={ <ai-1, ai>|ai-1, ai∈D, i=1, 2, ..., n}基本操作:InitList(&L)操作结果:构造⼀个空的线性表 L。
ListLength(L)初始条件:线性表 L 已存在。
操作结果:返回 L 中数据元素个数。
GetElem(L, i, &e)初始条件:线性表 L 巳存在,且1<=i<=ListLength(L)。