数据结构计算题_将下列函数,按他们在n→∞时的无穷大阶数,从小到大排列

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

{if(t-> data>max) max=t->data; (4 分)
max= maxnode(t->lchild,max) ;(2 分)
max= maxnode(t->rchild,max) ;(2 分)
}
return max; (2 分)
}// maxnode
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
30、组记录的关键字为 (52, 56, 26, 12, 69, 85, 33, 48, 70) ,给出快速排序的过程。
解答: 【编者: 本书对快速排序与其它书不一样】
解: 52, 56, 26, 12, 69, 85, 33, 48, 70 错误
第一趟排序 33, 48, 26, 12, 52, 85, 69, 56, 70
第二趟排序 26, 12, 33, 48, 52, 69, 56, 70, 85
第三趟排序 12, 26, 33, 48, 52, 56, 70, 69, 85
第四趟排序 12, 26, 33, 48, 52, 56, 70, 69, 85
第五趟排序 12, 26, 33, 48, 52, 56, 70, 69, 85
在这里插入图片描述
31、对半查找是否适合于以链接结构组织的表?
答:对半查找不适合于以链接结构组织的表。 。
30. 请指出中序遍历二叉查找树的结点可以得到什么样的结点序列。
答:中序遍历二叉查找树的结点就可以得到从小到大排序的结点序列。
在这里插入图片描述
32、已知待排记录的关键字序列为 {25, 96,11,63,57,78,44} ,请回答下列问题:
(1)画出堆排序的初始堆(大根堆) ;
(2)画出第二次重建堆之后的堆。
在这里插入图片描述
33、.要在[ 0…n-l]的向量空间中建立两个栈 stackl和stack2,请回答:
(1)应该如何设计这两个栈才能充分利用整个向量空间?
(2)若stackl的栈顶指针为 topl,stack2的栈顶指针为 top2,如果需要充分利用整个向量空间,则:
栈stackl空的条件是: ___________;
栈stack2空的条件是: ___________;
栈stackl和栈 stack2满的条件是: ___________。
在这里插入图片描述

34、27.已知广义表如下:
A=(B,y)
B=(x ,L)
L=(a,b)
要求:
第 12 页
(1)写出下列操作的结果
tail(A)=_.
head(B)=

(2)请画出广义表 A对应的图形表示。
在这里插入图片描述

35、已知二叉树如下:
在这里插入图片描述
请画出该二叉树对应的森林。
在这里插入图片描述
36、.请回答下列问题:
(1)英文缩写 DAG 的中文含义是什么?
(2)请给出下面 DAG 图的全部拓扑排序。
在这里插入图片描述

37、已知线性表 (a1,a2,a3…,an)按顺序存放在数组 a中,每个元素均为整数,下列程序的功能是将所有小于 0的元素移
到全部大于等于 0的元素之前。例如,有 7个整数的原始序列为 (x,x,-x,-x,x,x,-x) ,变换后数组中保存的序列是
(-x,-x,-x,x,x,x,x) 。请在程序处填入合适的内容,使其成为完整的算法。
f30(int a[], int n)
{ int k,m,temp;
m= (1) ;
while (a[m]<0 &&m<n)
m= (2) ;
k=m;
while (k<n)
{ while(a [k]>=0&&k<n)
k= (3) ;
if(k<n)
{ temp=a[k];
a[k]=a[m];
a[m]= (4) ;
m= (5) ;
}
}
}
在这里插入图片描述
(1)
(2)
(3)
(4)
(5)
38、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

39、阅读下列程序,并回答问题:

#include<stdio.h>
substr(chart,chars,int pos,int len)
{ while (len>0&&*s )
{ t=(s+pos-l);
第 14 页
t++;s++;len–;
}
t=’\0’;
}
char f31(chars)
{ char t[100];
if (strlen(s)=1)
return s;
substr(t,s,1,1);
substr(s,s,2,strlen(s)-1);
f31(s);
return strcat(s,t);
}
main( )
{ char str[100]= ‘‘String’’;
printf(’’%s\n’’,f31(str));
}
(1)请写出执行该程序后的输出结果;
(2)简述函数 f31的功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
40、下面程序实现插入排序算法。
typedef struct{
int key;
Info otherinfo;
}SeqList;
void InsertSort(SeqList R[] ,int n)
{/
待排序列保存在 R[ 1…n]中 */
SeqList x;
int i,j,k,lo,hi,mi;
for (i=2 ;i<=n ;i++)
{
(1) ;
lo=1 ;
第 15 页
hi=i-l;
while (lo<=hi)
{
mi=(lo+hi)/2;
if ( (2) ) break;
if (R[mi].key>x.key) hi=mi-l;
else lo=mi+l;
}
if (mi=lo) k=i - mi;
else k=i - mi-1;
for (j=0 ;j<k ;j++)
(3) ;
R[i-j ]=x;
}
}
在空白处填写适当的内容,使该程序功能完整。

答 :
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
41、已知二叉树的定义如下:
typedef struct node{
int data;
struct node *lchild, *rchild;
}*Bitptr ;
编写递归算法求二叉树的高度。函数原型为: int f34(Bitptr t);
在这里插入图片描述
42、29稀疏矩阵 A 如下,写出矩阵 A 的三元组表及矩阵 A 的转置矩阵的三元组表。
答 :在这里插入图片描述
在这里插入图片描述
43、一棵二叉树的前根遍历序列为 ABCDEFG ,中根遍历序列为 CBDAEGF ,试构造出该二叉树。
在这里插入图片描述

44、31.下述矩阵表示一个无向连通网,试画出它所表示的连通网及该连通网的最小生成树。
在这里插入图片描述
答 :
在这里插入图片描述
45、32给定表( 80, 90,50,70,75,60,40,100),试按元素在表中的顺序将它们依次插入一棵初始时为空的二叉排
序树,画出插入完成后的二叉排序树。
答:
在这里插入图片描述
46、试写出一组键值( 46,58,15, 45,90,18,10,62)应用直接插入排序算法从小到大排序后各趟的结果。
在这里插入图片描述

47、试写出一组键值( 46,58,15, 45,90,18,10,62)应用直接插入排序算法从小到大排序后各趟的结果。
在这里插入图片描述

48、试分别写出二叉树的先根遍历和中根遍历的递归算法
在这里插入图片描述
49、试编写以单链表为存储结构实现直接选择排序的算法。
在这里插入图片描述
50、在栈的输入端元素的输入顺序为 1,2,3,4,5,6,进栈过程中可以退栈,则退栈时能否排成序列 3,2,5,6,
4,1 和 1,5,4, 6,2,3,若能,写出进栈、退栈过程,若不能,简述理由。 (用 push(x)表示 x 进栈, pop(x)
表示 x 退栈)
在这里插入图片描述
51、已知一棵二叉树的中根遍历序列为 CBEDFAGH ,后根遍历序列为 CEFDBHGA ,画出该二叉树。
在这里插入图片描述
52、给定表( 15,11,8,20, 14,13),试按元素在表中的顺序将它们依次插入一棵初始时为空的二叉排序树,画
出插入完成后的二叉排序树,并判断该二叉排序树是否为平衡二叉排序树,若为非平衡二叉排序树,将它调整为
平衡二叉排序树。
在这里插入图片描述
在这里插入图片描述

53、如题 32 图所示无向图, (1)写出其邻接矩阵; (2)写出三种以顶点 A 为起点的深度优先搜索顶点序列。

在这里插入图片描述

在这里插入图片描述

54、、用冒泡排序法对数据序列( 49, 38,65,97,76,134,27,49)进行排序,写出排序过程。并说明冒泡排序是否为稳定排序
在这里插入图片描述
55、编写计算二叉树中叶子结点数目的算法。
在这里插入图片描述

56、开散列表的类型定义如下:

typedef struct tagnode
{keytype key;
struct tagnode*next;
}*pointer,node;
typedef pointer openhash[ n];
试写出开散列表上的查找算法。
在这里插入图片描述

57、
在这里插入图片描述

在这里插入图片描述

58、
在这里插入图片描述
答 :
在这里插入图片描述

59、
在这里插入图片描述
答:领接矩阵
在这里插入图片描述

60、
在这里插入图片描述
答 :
在这里插入图片描述

61、
在这里插入图片描述
答 :
在这里插入图片描述

62、在这里插入图片描述
答 :
在这里插入图片描述

63、
在这里插入图片描述
答:在这里插入图片描述

64、设某文件有 14个记录,其关键字分别为{25,75,125,93,241,203,19,198,121,173,218,80,214,329} 。桶的容量 M=3,此时采用除留余数法构造散列函数,且散列函数为 h(k)=k%5, 画出该散列文件的结构图,并说明如何对其进行删除
或插入、检索等操作。
答案:由于散列函数 h(k)=k%5, 从而可得按散列函数方法组织的文件结构如下 ( 可选桶数为
(14/3 )×(1+10%)=5);
当需对该散列文件中的记录进行检索时,可首先根据给定记录的关键字值,用散列函数求出其对应的散列地址,此地址即为桶的编号,然后按照散列表中第 i 项给出的地址把该桶中的所有记录读入内存,并对这些记录进行顺序检索。若找到说明检索成功,否则,若该桶不满或其指针域为空,说明检索失败。此时若其指针域不空,则该指针把第一个溢出桶的记录读入内存,继续检索
直到检索成功或失败时为止。当要对散列文件中的记录进行删除操作时,同样可首先利用散列函数求出该记录所在的存储桶并
把它读入内存,接着把该记录与最后一个记录对调,然后把该桶重新写回到外存储器的原来的位置。当从最后一个桶中删除最后一个记录时,可将此空桶释放回系统,以节省存储空间。当要对散列文件中的记录进行更新或修改时,可首先检索该记录所在的存储桶,并把该桶记录读入内存,接着检索该记录,并修改,然后把修改过的桶重新写回到原来的位置即可。

65、写出二分查找的递归算法。
答案: int binlist (datatype a [n];int s,t;datatype x)/*n 为元素个数, s,t 分别为查找区
间的上、下界 /
{ if(S>t) return(0);/
查找失败 /
else { mid=(s+t)/2;
switch(mid)of
{ x<a [mid]:return (binlist(a,s,mid-1,x));/
在低端区间上递归 /
x==a[mid]:return (mid);/
查找成功 /
x>a[mid]:return(binlist(a,mid+1,t,x));/
在高端区间上递归 */
}
}
}

66、对于如下一个有序的关键字序列 {5,9,12,18,23,31,37,46,59,66,71,78,85}, 现在要求用二
分法进行查找值为 18的关键字,则经过几次比较之后能查找成功 ?
答案:根据二分查找的过程,我们可以得到如下的比较结果:
第一次比较:[ 5,9,12,18,23,31,37,46,59,66,71,78,85,]

第二次比较:[ 5,9,12,18,23,31],37,46,59,66,71,78,85

第三次比较: 5,9,12[18,23,31],37,46,59,66,71,78,85

第四次比较: 5,9,12[18]23,31,37,46,59,66,71,78,85

则从上面的比较过程我们可以看出:经过四次比较之后,就可以查找到值为 18的关键字。

67、在一棵二叉树中,度为 0的结点个数与度为 2的结点个数和度数之间有什么关系 ?在一棵完全二叉树中,如果共有 200个结点,则能判断出叶结点的个数吗 ?如果能,请指出会有多少个叶结点,多少个度为2的结点 ?多少个度为 1的结点?如果有 201个结点呢?

答案:在一棵二叉树中,度数为 0的结点 ( 叶结点 )的个数总是比度为 2的结点的个数多 1。根据完
全二叉树的定义:若一棵二叉树至多只有最下面的两层上结点的度数可以小于 2,并且最下一层上的结点都集中在该层最左边的若干位置上,
则我们可以得出这样一个结论:在一棵完全二叉树上,或者没有度为 1的结点。则根据以上分析,我们可以这样计算此题:设度数为 2的结点有 n个,则必有 n+1个度为 0的结点,即度数为 2和度数为 0的结点数之和为 2n+1(是奇数 ) ,
于是得出,如果一棵完全二叉树的结点总数为奇数,则此树中必然不存在度为 1的结点,若完全二叉树中结点总数为偶数,则必然有 1个度为 1的结点存在,于是若完全二叉树中有 200个结点,就必有 100个对结点,99个度数为 2的结点, 12个度数为 1的结点,如果二叉树中有 201个结点,则必有 101个叶结点, 100个度数为 2的结点,没有度数为 1的结点。

68、以下运算实现在循环队上取队头,请在 ___处用适当的语句予以填充。
int GetHead(CycqueueTp sq,DataType *x)
{ if(sq.rear==___return(0);
else { *x=sq.data [___];
return(1);
}
}
答案: sq.front (sq.front+1)% maxsize

69、以下运算实现在链栈上的初始化,请在 ___处用适当的语句予以填充。
void InitStack (LStackTp *ls){;___}
答案: ls=NULL

70、以下算法在开散列表 HP中查找键值等于 K的结点,成功时返回指向该点的指针,不成功时返
回空指针。请分析程序,并在 ___上填充合适的语句。
pointer research-openhash(keytype K,openhash HP)
{ i=H(K);/* 计算K的散列地址 /
p=HP[i ];/i 的同义词子表表头指针传给 p/
while(___)p=p->next;/
未达到表尾且未找到时,继续扫描 */
______;
}
答案: (p!=NULL)&&(p->key!=K) return§

71、写出向某个有序文件中插入一个记录的程序。
答案:所谓有序文件是指文件的记录按关键字由小到大 (或由大到小 )顺序存放。为方便起见,可
设文件的每一个记录是一个整数,文件上数据是按由小到大顺序存放。设插入数据是命令行的第
3个参数,且设为 d。若原文件中没有数据,则 d写入文件;若有数据,则找到第 1个比d大的数据
i ,先写入 d,再将 i 和其后各数据写回文件中,可通过调用 fseek 函数来实现插入。相应程序为:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#define LEN sizeof(int)
void main(int argi,char * * argc)
{ int fp,i,d;
if (argi<3)
{ printf( ″filename int n″)
exit(0);
}
d=atoi (argc [2]);
fp=open(argc [1],O_CREAT |O_RDWR |O_BINARY,s-IREAD |S_IWRITE);
while(1)
{ if ( read(fp,&I,LEN) !=LEN)
{write (fp,&d,LEN)😕* 文件结束, d添加到文件尾端 /
break; }
if (i>=d)/
文件中读出数据 i ,若i>=d,则先存 d*/
{ do
{ fseek(fp,-1Llen,SEEK_CUR);/ 文件指针后退 1个记录 */
write(fp,&d,LEN);/*d 写到文件中 /
d=i;/
原i 作d,以便处理其他数据 /
}while (read(fp,&i,LEN)==LEN);
write(fp,&d,LEN);/
继续读数据,并判别文件是否结束 */
break;
}
}
close (fp);
}/main/

72、对题 26 图中所给的二叉排序树 T回答下列问题。
(1) 给出能生成 r 的 2 种关键字插入序列;
(2) 给出 r 的前序遍历序列。
在这里插入图片描述

在这里插入图片描述

73、对题 27 图所示的无向带权图 G,回答下列问题。
(1) 给出图 G的邻接矩阵;
(2) 给出图 G的一棵最小生成树。
在这里插入图片描述
答 :

在这里插入图片描述
在这里插入图片描述

74、现有 5 个权值分别是 20、31、 16、7 和 l5 的叶结点,用它们构造一棵哈夫曼树,画出该树。
在这里插入图片描述

75、对于给定的一组关键字序列 {26 ,l8 ,60,65,45,13,32} ,写出使用直接选择排序方法将其排成升序序列的过程。
在这里插入图片描述

76、设非空双向循环链表 L 的头指针为 head,表结点类型为 DLNode,定义如下。
在这里插入图片描述

初始时, L 中所有结点的 prior 域均为空 (NULL),next 域和 data 域中已经正确赋
值。如题 30 图 a 所示
在这里插入图片描述

函数 f30 完成的功能是:将 L 中各结点的 prior 域正确赋值,使 L 成为双向循环链表。如题 30 图 b 所示。
在这里插入图片描述

将空白处应填写的内容答在答题卡上。
在这里插入图片描述

在这里插入图片描述

77、已知二叉树的二叉链表类型定义如下,阅读程序,并回答问题。

在这里插入图片描述

若二叉树如下所示,写出调用 f31(T) 的输出结果
在这里插入图片描述

在这里插入图片描述

78、阅读下列程序,写出 f32 的输出结果。
在这里插入图片描述

在这里插入图片描述

79、阅读程序,回答下列问题。
在这里插入图片描述

在这里插入图片描述

80、已知单链表类型定义如下:
在这里插入图片描述
单链表 L 中结点数不少于 2。设计算法判断 L 中存储的全部 n 个数据是否是斐波那契序列的前 n 项。如果是,则
函数返回 1,否则返回 0。函数原型如下
在这里插入图片描述

在这里插入图片描述

81、已知 n 阶对称矩阵 A的元素为 a i,j (0≤i ,j ≤n 一 1),采用“按行优先”将下三角部分
的元素 ( 含主对角线 ) 保存在一维数组 sa 中,且约定元素 a 0,0 保存在 sa[0] 中,元素 a i,j ( ≤i ,
j ≤n-1) 保存在 sa[k] 中,请给出由下标 i ,j 计算下标 k 的计算公式。
在这里插入图片描述

82、己知二又树 T 如题 27 图所示。
在这里插入图片描述

请问答下列问题:
(1) 画出该二叉树对应的森林。
(2) 写出对森林进行前序遍历的遍历序列 i
答 :
在这里插入图片描述

83、题 28 图所示为一棵含 2 个关键字的 3 阶 B树 T。现将关键字序列 {40 ,60,70,20,10}依次插入到 T 中,画出每插入一个关键字后得到的树型。
在这里插入图片描述

答 :
在这里插入图片描述

84、给定无向带权连通图 G如题 29 图所示,从顶点 v 0 开始,使用普里姆 (Prim) 算法,求 G的最小生成树 T。请回答下列问题。在这里插入图片描述

(1) 画出最小生成树 T。
(2) 计算 T中各边权值之和。
在这里插入图片描述

85、请写出下列程序段的输出结果。
在这里插入图片描述

在这里插入图片描述

答:
在这里插入图片描述

86、己知存储稀疏矩阵三元组表的类型定义如下:
在这里插入图片描述
在这里插入图片描述
答:
在这里插入图片描述

87、已知二叉树的二叉链表类型定义如下:
在这里插入图片描述

答:
在这里插入图片描述

88、函数 f33 的参数 t 指向题 33 图所示的二叉排序树的根,阅读程序,回答下列问题。
在这里插入图片描述

  1. 若连续 3 次调用函数 f33 ,参数 K的值依次取 10、25、10,写出每次调用后函数的输
    出结果;
    (2) 说明函数 f33 的功能。
    在这里插入图片描述

89、已知顺序表 SeqList 定义如下:
typedef struct{
KeyType key ;
InfoType otherinf0 ;
}RecType :
typedef RecType SeqList[MAXSIZE+1] ;
编写函数,用冒泡排序法将 n个元素的待排序列 R按关键字降序排序。函数原型为:
int f34(SeqList R ,int n)
在这里插入图片描述

90、
在这里插入图片描述

在这里插入图片描述

91、
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

92、
在这里插入图片描述
在这里插入图片描述

93、
在这里插入图片描述

在这里插入图片描述

94、
在这里插入图片描述

答 :
在这里插入图片描述
95、
在这里插入图片描述

在这里插入图片描述

答 :
在这里插入图片描述

96、
在这里插入图片描述

在这里插入图片描述
答 :
在这里插入图片描述

97、
在这里插入图片描述

在这里插入图片描述

98、在这里插入图片描述
答 :
在这里插入图片描述
99、
在这里插入图片描述
100、
在这里插入图片描述
101、
在这里插入图片描述
102、
在这里插入图片描述
103、
在这里插入图片描述

104、
在这里插入图片描述

105、
在这里插入图片描述
106、
在这里插入图片描述

107、
在这里插入图片描述

108、
在这里插入图片描述
109、
在这里插入图片描述

110、
在这里插入图片描述
111、
在这里插入图片描述
112、
在这里插入图片描述

113、
在这里插入图片描述
114、
在这里插入图片描述
115、
在这里插入图片描述
116、
在这里插入图片描述
117、
在这里插入图片描述

118、
在这里插入图片描述

119、
在这里插入图片描述
在这里插入图片描述

120、
在这里插入图片描述
121、
在这里插入图片描述

122、
在这里插入图片描述
123、
在这里插入图片描述
124、
在这里插入图片描述
125、
在这里插入图片描述
126、
在这里插入图片描述
127、
在这里插入图片描述
128、
在这里插入图片描述
129、
在这里插入图片描述

130、
在这里插入图片描述

131、
在这里插入图片描述
132、
在这里插入图片描述

133、
在这里插入图片描述

134、
在这里插入图片描述
135、
在这里插入图片描述

136、已知某二叉树如下图所示,试给出其二叉链表及顺序存储结构表示。
在这里插入图片描述

答 :
在这里插入图片描述
在这里插入图片描述

137、在这里插入图片描述
答 :
在这里插入图片描述

138、已知某二叉排序树 10 个结点的值依次为 1~10,其结构如图所示,试标出该二叉树各结点所对应的具体值。
在这里插入图片描述

答 :
在这里插入图片描述

139、已知一组键值序列( 28,47,35,42,53,60,34,22),试给出采用直接插入排序法对该组序列作升序排序的每一趟结果。
在这里插入图片描述

140、.已知一组键值序列( 3,6, 8,9,2,7,4,3),试采用快速排序法对该组序列作升序排序,并给出每一趟的排序结果。
在这里插入图片描述

141、设某单链表中,存在多个结点其数据值均为 D,试编写一算法统计该类结点的个数。
在这里插入图片描述

142、35叉树存储结构采用二叉链表表示,试编写一算法,计算一棵二叉树的所有结点数。
在这里插入图片描述

143、假设二叉树的 RNL遍历算法定义如下:
若二叉树非空,则依次执行如下操作:
(1) 遍历右子树;
(2) 访问根节点;
(3) 遍历左子树。
已知一棵二叉树如图所示,请给出其 RNL遍历的结果序列。

答 :
该树的 RNL遍历结果序列为: GCFABD

144、已知一个无向图 G=(V,E),其中 V={A,B,C,D,E,F},邻接矩阵表示如下所示。
请回答下列问题:
(1) 请画出对应的图 G。
(2) 画出图 G的邻接表存储结构。

答:
在这里插入图片描述

145、已知一组待排记录的关键字序列为 (16, 12,18,60,15,36,14,18,25,85) ,用堆排序方法建小根堆,请给出初始建堆后的序列。


初始堆序列是 (12 ,15,14,18,16,36,18,60,25,85)

146、已知一棵二叉排序树如图所示。

请回答下列问题:
(1) 画出插入元素 23 后的树结构;
(2) 请画出在原图中删除元素 57 后的树结构
在这里插入图片描述
答:
在这里插入图片描述

147、二叉树的存储结构类型定义如下

typedef struct node{
int data;
struct node
*
lchild ,

  • rchild ;
    } BinNode ;
    typedef BinNode

BinTree;
编写递归算法,求只有一个孩子结点的结点总数,并计算这些结点的数据值的和。
函数的原型为: void f34(BinTree T, int

  • count,
    int

sum)
*
count 和

  • sum 的初值为
    0。
    答 :
    在这里插入图片描述

148、30.已知下列程序, Ls 指向带头结点的单链表。

Typedefstruct node {
DataType data;
struct node * next;
} * LinkList;
void f30( LinkList Ls )
{ LinkList p, q;
q = Ls->next;
if ( q && q->next ) {
Ls->next = q->next;
p=q
while ( p->next )
p = p->next;
p->next = q;
q->next = NULL;
}
}
请回答下列问题:
(1) 当 Ls 指向的链表如下图所示,请画出执行本函数之后的链表的结果。
在这里插入图片描述

(2) 请简述算法的功能
答 :
在这里插入图片描述
(2) 将单链表的首结点(第一个结点)移到链尾(作为最后一个结点) 。
或将链头元素移到链尾。

149、已知字符串处理函数 f31 程序如下。

int f31(charstrl , charstr2)
{ while(*strl==*str2&&(*strl!= ’\0’)){
strl++ ;
str2++ ;
}
return(*strl-*str2 ? l ∶0);
}
请回答下列问题:
(1) 若调用语句是 f31( ”abcde”,” abcdf ’) ,则函数的返回值是什么 ?若调用语句是
f31( ”abcde”,” abcde”) ,则函数的返回值是什么 ?
(2) 简述该函数的功能。

31. (1)1 , 0 (2 分)
(2) 判断两个字符串是否相等。若串相等,则返回 O,否则返回 1。

32.数组 A[] 中存储有 n 个整数,请阅读下列程序。

void f32(intA[] ,int n)
{ inti ,j , k,x;
k=n-l ;
while(k>0){
i=k ; k=0 ;
for(j=O ;j<i ;j++)
if(A[j]>A[j+1]){
x=A[j] ;
A[j]=A[j+l] ;
A[j+1]=x ;
k=j ;
} // end of if
} // end of while
return ;
}
请回答下列问题:
(1) 当 A[]={10 ,8, 2,4,6,7} 时,执行 f32(A ,6)后,数组 A中存储的结果是什么 ?
(2) 说明该算法的功能。

答32.(1)A[]={2,4,6,7,8,10) (3 分)
(2) 该算法实现了对数组 A进行冒泡排序。

150、下面程序实现二分查找算法。
Typedef struct{
KeyType key ;
InfoType otherinfo ;
}SeqList[N+1] ;
int BinSearch(SeqList R, int n ,KeyType K)
{ int low=1 ,high=n ;
while( (1) ){
mid=(1ow+high) /2;
if( (2) )
return mid ;
if(R[mid] .key>K)
high=mid-1 ;
else
(3) ;
}
return O ;
} // BinSearch
请在空白处填写适当内容,使该程序功能完整。
(1)
(2)
(3)

答:
33. (1) low<=high (2 分)
(2) R[mid].key==K (2 分)
(3) low=mid+l

151、已知二叉树采用二叉链表存储,其结点结构定义如下:
typedef struct Node{
ElmType data ;
struct Node *lchild ,*rchild ;
}*BiTree ;
请编写递归函数 SumNodes(BiTree T) ,返回二叉树 T 的结点总数。

参考答案
int SumNodes( BiTree T)
{ inti ,j ;
if( !T) retumO ; (空树处理, 2 分)
i=SumNodes( T->lchild) ; (左右子树递归, 6 分)
j=SumNodes( T->rchild);
retum (i+j+1) ; (返回结果计算, 2 分)
} //endofSumNodes(…)

152、顺序表类型定义如下:

typedef int SeqList[100] ;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

high=mid-1 ;
else
(3) ;
}
return O ;
} // BinSearch
请在空白处填写适当内容,使该程序功能完整。
(1)
(2)
(3)

答:
33. (1) low<=high (2 分)
(2) R[mid].key==K (2 分)
(3) low=mid+l

151、已知二叉树采用二叉链表存储,其结点结构定义如下:
typedef struct Node{
ElmType data ;
struct Node *lchild ,*rchild ;
}*BiTree ;
请编写递归函数 SumNodes(BiTree T) ,返回二叉树 T 的结点总数。

参考答案
int SumNodes( BiTree T)
{ inti ,j ;
if( !T) retumO ; (空树处理, 2 分)
i=SumNodes( T->lchild) ; (左右子树递归, 6 分)
j=SumNodes( T->rchild);
retum (i+j+1) ; (返回结果计算, 2 分)
} //endofSumNodes(…)

152、顺序表类型定义如下:

typedef int SeqList[100] ;

[外链图片转存中…(img-XS3WNbC6-1715379297286)]
[外链图片转存中…(img-6XU6I7UF-1715379297286)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值