《数据结构与算法 C语言版》—— 2.7习题

简介:

本节书摘来自华章出版社《数据结构与算法 C语言版》一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.7习题

1描述头指针、头结点、首元结点的区别,并说明头指针和头结点的作用。
2在顺序表中插入和删除一个结点需平均移动多少个元素?具体的移动次数取决于哪两个因素?
3在单链表和双向链表中,从当前结点出发是否能访问到任何一个结点?
4若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么?
5有线性表(a1,a2,…,ai-1,ai,ai+1,…,an),采用单链表存储,头指针为H,每个结点中存放线性表中的一个元素,现查找某个元素值为x的结点。分别写出下面三种情况的查找语句,要求查找时间尽量短。
(1)线性表中元素无序。
(2)线性表中元素递增有序。
(3)线性表中元素递减有序。
6下面是一个算法的核心部分,试说明该算法的功能。

pre=L->next;//L是一个带头结点的单链表,结点有数据域data和指针域next
if(pre!=NULL)
while(pre->next!=NULL){
p=pre->next;
if(p->data>=pre->data) pre=p;
else return(FALSE);
}
return(TUURE);
7设pa、pb分别指向两个带头结点的有序(从小到大)单链表。阅读下列程序,并回答以下问题:
(1)程序的功能。
(2)s1、s2中的值的含义。
(3)pa、pb中的值的含义。

void exam(LinkList pa,LinkList pa){
p1=pa->next;p2=pb->next;pa->next=NULL;s1=0;s2=0;
while(p1&&p2){
switch{
case(p1->datadata):p=p1;p1=p1->next;s2++;delete(p);
case(p1->data>p2->data):p2=p2->next;
case(p1->data=p2->data):p=p1;p1=p1->next;p->next=pa->next;
pa->next=p;p2=p2->next;s1++;
}
while(p1){p=p1;p1=p1->next;delete(p);s2++}
}

8假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写算法删除该结点的前驱结点。
9已知两个单链表La和Lb分别表示两个集合,其元素递增排列。编写算法求其交集Lc,要求Lc以元素递减的单链表形式存储。
10已知单链表L是一个递增有序表,试编写一个高效算法,删除表中值大于min且小于max的结点(若表中有这样的结点),同时释放被删除的结点的空间,这里min和max是两个给定的参数。请分析你的算法的时间复杂度。
11已知非空单链表的头指针为L,试编写算法,交换p所指结点与其下一个结点在链表中的位置(设p指向的不是链表中的最后一个结点)。
12线性表中有n个元素,每个元素是一个字符,现存于数组R[n]中,试编写算法,使R中元素的字符按字母字符、数字字符和其他字符的顺序排列。要求利用原来的空间,元素移动次数最小。
13试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。
14已知两个单链表La和Lb,其元素递增排列。编写算法,将La和Lb归并成一个单链表Lc,其元素递减排列(允许表中有相同的元素),要求不另辟新的空间。
15设以带头结点的双向循环链表表示的线性表L=(a1,a2,…,ai-1,ai,ai+1,…,an)。试编写一个时间复杂度为O(n)的算法,将L改造为L=(a1,a3,…,an,…,a4,a2)。
16设有一个双向循环链表,每个结点除有prior、data和next三个域外,还有一个访问频度域frep。在链表被启用之前,频度域frep的值为0,而每当对链表进行一次LocateElem(L,e)的操作后,被访问的结点的频度域frep的值增1,同时调整链表中结点之间的顺序,使其按发文频度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点。试写出符合上述要求的LocateElem操作的算法。

相关文章
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
115 1
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
TU^
|
6月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
40 1
|
2月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
32 7
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
105 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
6月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
27 2
TU^
|
6月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
44 1
TU^
|
6月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
39 1
TU^
|
6月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
31 1
TU^
|
6月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
19 1

热门文章

最新文章

  • 1
    2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
    30
  • 2
    2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    27
  • 3
    2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    29
  • 4
    2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    31
  • 5
    2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    25
  • 6
    2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    39
  • 7
    2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    26
  • 8
    2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    33
  • 9
    2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    25
  • 10
    数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
    95