数据结构--第2章.ppt

  1. 1、本文档共148页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Quick Quiz(2) 一、基础知识题 1. 试比较顺序表与链表的优缺点。 2. 试分析单链表与双链表的优缺点。 3. 为什么在单循环链表中设置尾指针比设置头指针更好? 4. 写出在循环双链表中的p所指结点之后插入一个s所指结点的操作。 5. 写出在单链表中的p所指结点之前插入一个s所指结点的操作。 6. 请利用链表来表示下面一元多项式 二、算法设计题 1. 有一个有n个结点的单链表,设计一个函数将第i-1个结点与第i个结点互换,但指针不变。 2. 设计一个函数,查找单链表中数值为x的结点。 3. 已知一个单链表,编写一个删除其值为x的结点的前趋结点的算法。 4. 已知一个单链表,编写一个函数从此单链表中删除自第i个元素起的length个元素。 5. 已知一个递增有序的单链表,编写一个函数向该单链表中插入一个元素为x的结点,使插入后该链表仍然递增有序。 6. 已知一个单链表,编写一个函数将此单链表复制一个拷贝。 7. 有一个共10个结点的单链表,试设计一个函数将此单链表分为两个结点数相等的单链表。 8. 与上题相同的单链表,设计一个函数,将此单链表分成两个单链表,要求其中一个仍以原表头指针head1作表头指针,表中顺序包括原线性表的第一、三等奇数号结点;另一个链表以head2为表头指针,表中顺序包括原单链表第二、四等偶数号结点。 9. 已知一个指针p指向单循环链表中的一个结点,编写一个对此单循环链表进行遍历的算法。 10. 已知一个单循环链表,编写一个函数,将所有箭头方向取反。 11. 在双链表中,若仅知道指针p指向某个结点,不知头指针,能否根据p遍历整个链表?若能,试设计算法实现。 12. 试编写一个在循环双向链表中进行删除操作的算法,要求删除的结点是指定结点p的前趋结点。 第二章习题解答 一、基本知识题答案 1. 答:顺序表用结点物理位置的相邻性来反映结点间的逻辑关系,其优点是:节省存储、随机存取,当表长变化较小,主要操作是进行查找时,宜采用顺序表。链表用附加的指针来反映结点间的逻辑关系,插入和删除操作相对比较方便,当表长变化较大,主要操作是进行插入和删除时,宜采用链表。 2. 答:双链表比单链表多增加了一个指针域以指向结点的直接前趋,它是一种对称结构,因此在已知某个结点之前或之后插入一个新结点、删除该结点或其直接后继都同样方便,操作的时间复杂度为O(1);而单链表是单向结构,对于找一个结点的直接前趋的操作要从开始结点找起,其时间复杂度为O(n)。 3. 答:由于对表的操作常常在表的两端进行,所以对单循环链表,当知道尾指针rear后,其另一端的头指针是rear-next-next(表中带头结点)。这会使操作变的更加容易。 4. 答: s-prior=p; s-next=p-next; p-next-prior=s; p-next=s; 5. 答: s-next=p-next; p-next=s; temp=p-data; p-data=s-data; s-data=temp; 6. 答:多项式A(x)用链表表示如下: 二、算法设计题答案 1. 解:本题的算法思想是:要使结点互换而指针不变,只要将两个结点的数据进行交换即可。实现本题功能的函数如下: void exchange(node *head,int i,n) { node *p,*q; int data; if(in) printf(error!\n); else { p=head; for(int j=1;ji;j++) p=p-next; q=p-next; data=q-data; q-data=p-data; p-data=data; } } 2. 解:实现本题功能的函数如下: void search(node *head,int x) { node *p; p=head; while(p-data!=x p!=NULL) p=p-next; if(p!=NULL) printf(结点找到了!\n); else printf(结点未找到!\n); } 3. 解:本题的算法思想是:先找到值为x的结点*p和它的前趋结点*q,要删除*q,

文档评论(0)

ki66588 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档