数据结构第三讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11. 线性表的表元存储方式有((1))和链接两种.试指出下列各表中使用的是何种存储 方式:表1是((2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4 是((5))存储方式.表左的 指向起始表元 表左的s指向起始表元 表左的 指向起始表元.
供选择的答案: A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接 F.树状 G.网状 H.随机 I.顺序 J.顺序循环 答案:11. 1, I.2, I .3, E 4,B. 5,C
删除b以前
删除b以后
删除时的主要操作 p->next= p->next ->next; 注:在已知链表中元素插入或删除的确切位置的情 况下,在单链表中插入和删除一个结点时,仅需要 修改指针而不需要移动元素. 具体算法实现见课本P29
循环链表
循环链表 是指链表中最后那个链结点
的指针域存放指向链表最前面那个结点的指针 整个链表形成一个环. ,整个链表形成一个环.
L
…
需要做的工作: 需要做的工作:
找到满足条件的结点; 1. 找到满足条件的结点; 若找到,申请一个新的链结点; 2. 若找到,申请一个新的链结点; 3. 将新结点插到满足条件的结点后面. 将新结点插到满足条件的结点后面.
插 入 前
L
…
插 入
p
…
a
e
b
…
s
插 list 入 后
s
p
e
…
a
…
主要操作如下: 主要操作如下: s->data=e; s->prior=p->prior;
删 除 前
list
…
删 除
p
…
x
…
删 除 后
list
…
…
主要操作: 主要操作:
e=p->data; p->prior->next=p->next; p->next->prior; free(p) 详细的算法见课本P37,算法2.19
静态链表 用一维数组来描述线性链表,其类型说明如下: //------------------------------线性链表的静态单链表存储结构 #define MAXSIZE 1000 typedef ElemType Int } Component, SLinkList[MAXSIZE] cur; struct { data; //链表的最大长度
注:1,数组的一个分量表示一个结点,游标(cur)代表指针指示结点在数组中的相 对位置. 2,数组的第零分量可看成头结点,其指针域指示指示链表的第一个结点. 3,这种结构需要预先分配一个较大的空间,在做线性表的插入和删除操作时不需要 移动元素,仅需要修改指针,故仍具有链式存储结构的主要优点
选择题
A ) 1.下述哪一条是顺序存储结构的优点?( A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑 结构的存储表示 错误的是哪一个?( B ) 2.下面关于线性表的叙述中,错误 错误 A.线性表采用顺序存储,必须占用一片连续的存储单元. B.线性表采用顺序存储,便于进行插入和删除操作. C.线性表采用链接存储,不必占用一片连续的存储单元. D.线性表采用链接存储,便于插入和删除操作. 3.线性表是具有n个( C )的有限序列(n>0). A.表元素 B.字符 C.数据元素 D.数据项 E.信息项 4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运 算,则利用( A )存储方式最节省时间. A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表 5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素, D 则采用( )存储方式最节省运算时间. A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针 的单循环链表
答案:12.B13.C14.C15.C 16.A
答案:18,A 19,D 22,D 24,B 25,B
答案:26,A 27,D 1. ×2.√3. √4.×
答案:7. ×8.×9.×10.×11.×12.×13. ×14. √15.×16. √
1.顺序 2.(n-1)/2 3.py->next=px->next; px->next=py 4 .n-i+1
2.对于头指针为Head带头结点的单链表,判断该表为空 的条件( C ). A. Head= =null, B. Head->next= =Head, C. Head->next= =null D. Head !=null
注:有的时候为了某个常操作的方便,在 循环链表中设立尾指针而不设头指针,如 下图,
prior data next
其中, 其中,data 为数据域 pFra Baidu bibliotekior ,next 分别为指向该结点的直接前驱结 点与直接后继结点的指针域
双向链表的几种形式
L
… 无头结点的双向链表
L
^
… 无头结点的双向循环链表
L
… 带头结点的双向循环链表
二.双向链表的插入
在带有头结点的非空双向循环链表中第 一个数据域的内容为a的链结点右边插入一 个数据信息为x的新结点 的新结点. 个数据信息为 的新结点.
判断题部分答案解释 1, 头结点并不"仅起"标识作用,并且使操作统一.另外, 头结点数据域可写入链表长度,或作监视哨. 4.两种存储结构各有优缺点,应根据实际情况选用,不能笼 统说哪一个好. 7.集合中元素无逻辑关系. 9.非空线性表第一个元素无前驱,最后一个元素无后继. 13.线性表是逻辑结构,可以顺序存储,也可链式存储.
s->next=p;
p->prior->next=s;
p->prior=s;
二.双向链表的删除
删除带有头结点的非空双向循环链表 中第一个数据域的内容为x 的链结点. 中第一个数据域的内容为x 的链结点.
list
…
需要做的工作: 需要做的工作:
找到满足条件的结点; 1. 找到满足条件的结点; 若找到,删除(并释放)满足条件的结点. 2. 若找到,删除(并释放)满足条件的结点.
�
6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最 节省时间. A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链 表 7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个 结点.则采用( D )存储方式最节省运算时间. A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表 8. 静态链表中指针表示的是( C ). A. 内存地址 B.数组下标 C.下一元素地址 D.左,右孩子地址 9. 链表不具有 不具有的特点是( B ) 不具有 A.插入,删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 10. 下面的叙述不正确 不正确的是( B,C ) 不正确 A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关 C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关
第三讲
一,单链表的插入与删除; 二,双链表的插入与删除; 三,循环链表和静态链表简介; 四,典型例题
在单链表中,取得第i个数据元素必须从头指针出发寻找,因此 单链表是非随机存取的存储结构 在单链表中如何实现插入和删除操作?
实现的主要操作如下: s->next=p->next; p->next=s;
线性链表
H …
循环链表
H …
头结点
带有头结点的循环链表
H …
注:从表中任一个结点出发均可找到表中其他结点
1. 对于以Head为头结点的单循环链表中,q指针指向链 尾的条件是( B ). A.q->next= =null, C. q->next->next= =Head B.q->next= =Head, D. q->data=-1.
例如:见课本P35,实现两个线性表的合并时 ,仅需要将一个表的表尾和另一个表的表头 相接.
双向链表及其操作
1. 双向链表的构造 2.双向链表的插入与删除 2.双向链表的插入与删除
一.双向链表的构造
所谓双向链表是指链表的每一个结点中除了数 据域以外设置两个指针域, 据域以外设置两个指针域,其中之一指向结点的直 接前驱结点,另外一个指向结点的直接后继结点. 接前驱结点,另外一个指向结点的直接后继结点. 链结点的实际构造可以形象地描述如下: 链结点的实际构造可以形象地描述如下:
5.主要是使插入和删除等操作统一,在第一个元素之前插入元素和删除第一 个结点不必另作判断.另外,不论链表是否为空,链表指针不变. 6.O(1),O(n) 7.单链表,多重链表,(动态)链表,静态链表 8.f->next=p->next; f->prior=p; p->next->prior=f; p->next=f;