绪论-第1章-《数据结构习题集》答案解析-严蔚敏吴伟民版

本解析涵盖《数据结构》严蔚敏版习题集第一章基础知识题,深入解答数据结构概念、算法设计与分析等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

习题集解析部分

第1章  绪论

                                                                                          ——《数据结构习题集》-严蔚敏.吴伟民版


源码使用说明 链接☛☛☛《数据结构》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

课本源码合辑 链接☛☛☛《数据结构》课本源码合辑


本文档所在目录:数据结构\▼配套习题解析\▼01 绪论\


习题解析

一、基础知识题

1.1❶    简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。



1.2❷    试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。



1.3❷    设有数据结构(D,R),其中

D={d1,d2,d3,d4},R={r},r={(d1,d2),(d2,d3),(d3,d4)}。

        试按图论中图的画法惯例画出其逻辑结构图。



1.4❷    试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。



1.5❷    试画出与下列程序段等价的框图。

(1)product = 1;

     i = 1;

     while(i<=n)

     {

         product *= i;

         i++;

     }

(2)i=0;

     do

     {

         i++;

     }while((i!=n) && (a[i]!=x));

(3)switch

     {

         case x<y:     z=y-x;

             break;

         case x==y:   z=abs(x*y);

             break;

         default:        z=(x-y)/abs(x)*abs(y);

     }



1.6❸    在程序设计中,常用下列三种不同的出错处理方式:

    (1)用exit语句终止执行并报告错误;

    (2)以函数的返回值区别正确返回或错误返回;

    (3)设置一个整型变量的函数参数以区别正确返回或某种错误返回。

        试讨论这三种方法各自的优缺点。



1.7❸    在程序设计中,可采用下列三种方法实现输出和输入:

    (1)通过scanf和printf语句;

    (2)通过函数的参数显式传递;

    (3)通过全局变量隐式传递。

        试讨论这三种方法的优缺点。



1.8❹    设n为正整数。试确定下列各程序段中前置以记号@的语句的频度:

(1)i = 1; k = 0;

     while(i <= n-1)

     {

      @ k += 10 * i;

           i++;

     }

(2)i = 1; k =0;

     do

     {

      @ k += 10 * i;

           i++;

     }while(i <= n-1);

(3)i = 1; k =0;

     while(i <= n-1)

     {

           i++;

      @ k +=10 * i;

     }

(4)k = 0;

     for(i=1; i<=n; i++)

     {

         for(j=i; j<=n; j++)

          @ k++;

     }

(5)for(i=1; i<=n; i++)

         for(j=1; j<=i; j++)

             for(k=1; k<=j; k++)

              @ x += 1;

(6)i = 1; j = 0;

     while(i+j <= n)

     {

      @ if(i>j)

              j++;

          else

              i++;

     }

(7)x = n; y = 0;        //n是不小于1的常数

     while(x >= (y+1)*(y+1))

      @ y++;

(8)x = 91; y = 100;

     while(y>0)

     {

      @ if(x>100)

          {

              x -= 10;

              y--;

           }

           else

              x++ ;

     }



1.9❸    假设n为2的乘幂,并且n>2,试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。

    int Time (int n)

    {

        count = 0;

        x = 2;

        while(x<n/2)

        {

            x *= 2;

            count++;

         }

         return (count)

     }//Time



1.10❷  按增长率由小至大的顺序排列下列各函数:

    2100,(3/2)n,(2/3)n,(4/3)n,nn,n3/2,n2/3,√n,n!,n,log2n,n/log2n,log22n,log2(log2n),nlog2n,nlog2n

    各函数的排列次序如下:



1.11❸  已知有实现同一功能的两个算法,其时间复杂度分别为O(2n)和O(n10),假设现实计算机可连续运算的时间为107秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)105次。试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由。



1.12❸  设有以下三个函数:

f(n)=21n4+n2+1000,g(n)=15n4+500n2,h(n)=5000n3.5+nlogn

请判断以下断言正确与否:

(1)f(n)是O(g(n))

(2)h(n)是O(f(n))

(3)g(n)是O(h(n))

(4)h(n)是O(n3.5)

(5)h(n)是O(nlogn)



1.13❸  试设定若干n值,比较两函数n2和50nlog2n的增长趋势,并确定n在什么范围内时n2的值大于50nlog2n。



1.14❸  判断下列各对函数f(n)和g(n),当n→∞时,哪个函数增长更快?




1.15❸  试用数学归纳法证明:


二、算法设计题

1.16❷  试写一算法,自大到小依次输出顺序读入的三个整数X,Y和Z的值。

完整源码见 《数据结构习题集》-第1章-绪论-第1.16题



1.17❸  已知k阶斐波那契序列的定义为

f0=0, f1=0, …, fk-2=0,fk-1=1;

fn=fn-1+fn-2+…+fn-k,n=k,k+1,…

试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

完整源码见 ☛ 《数据结构习题集》-第1章-绪论-第1.17题



1.18❸  假设有A、B、C、D、E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,并构成一张表,表中每一行的形式为

项目名称性别校名成绩得分

编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。



1.19❹  试编写算法,计算i!*2i的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=1,2,…,n)。假设计算机中允许的整数最大值为maxint,则当n>arrsize或对某个k(1≤k≤n)使k!*2k>maxint时,应按出错处理。注意选择你认为较好的出错处理方法。

完整源码见 ☛ 《数据结构习题集》-第1章-绪论-第1.19题



1.20❹  试编写算法求一元多项式的值Pn(x),并确定算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。本题的输入为ai(i=0,1,…,n),x0和n,输出为Pn(x0)。

完整源码见 ☛ 《数据结构习题集》-第1章-绪论-第1.20题



         更多章节持续更新中...微笑




1 绪论 1.1 数据结构的基本概念和术语 1.1.1 引言 1.1.2 数据结构有关概念及术语 1.1.3 数据结构和抽象数据类型(ADT) 1.2 算法描述与分析 1.2.1 什么是算法 1.2.2 算法描述工具——C语言 1.2.3 算法分析技术初步 习题一 第2 线性表 2.1 线性表的定义及其运算 2.1.1 线性表的定义 2.1.2 各种运算简介 2.2 线性表的顺序存储结构(向量) 2.2.1 顺序存储结构(向量) 2.2.2 向量中基本运算的实现 2.3 线性表的链表存储结构 2.3.1 单链表与指针 2.3.2 单链表的基本运算 2.4 循环链表和双向链表 2.4.1 循环链表 2.4.2 双向链表 2.4.3 顺序存储结构与链表存储结构的综合分析与比较 2.5 多项式相加问题 2.5.1 多项式相加的链表存储结构 2.5.2 多项式相加的算法实现 2.6 线性表的算法实现举例 2.6.1 实现线性表顺序存储结构及运算的C语言源程序 2.6.2 单链表处理的C语言源程序 习题3 栈和队列 3.13.1.1 栈的定义及其运算 3.1.2 栈的顺序存储结构(向量) 3.1.3 栈的链表存储结构 3.1.4 栈的应用 3.2 队列 3.2.1 队列的定义及运算 3.2.2 队列的顺序存储结构(向量) 3.2.3 队列的链表存储结构 3.3 栈和队列的算法实现举例 习题三 第44.1 串的基本概念 4.2 串的存储结构 4.2.1 串的顺序存储 4.2.2 串的链表存储 4.2.3 串变量的存储映象 4.3 串的运算 4.3.1 串的运算简介 4.3.2 串的匹配运算 4.4 文本编辑 习题四 第5 数组和广义表 5.1 数组的基本概念 5.1.1 数组的概念 5.1.2 数组的顺序表示 5.1.3 特殊矩阵的压缩存储 5.2 稀疏矩阵的三元组存储 5.2.1 三元组表 5.2.2 稀疏矩阵的运算 5.3 稀疏矩阵的十字链表存储 5.3.1 十字链表的组成 5.3.2 十字链表的有关算法 5.4 广义表 5.4.1 广义表的概念和特性 5.4.2 广义表的存储结构 5.4.3 求广义表的深度 5.4.4 广义表的输 5.4.5 建立广义表的存储结构 5.5 迷宫问题 习题五 第6 树 6.1 树的基本概念和术语 6.1.1 树的定义 6.1.2 树的常用术语 6.1.3 树的表示方法 6.2 叉树 6.2.1 叉树的定义 6.2.2 叉树的重要性质 6.2.3 叉树的存储结构 6.2.4 叉树叉链表的一个生成算法 6.3 遍历叉树 6.3.1 先根遍历 6.3.2 中根遍历 6.3.3 后根遍历 6.3.4 叉树遍历算法的应用 6.4 线索叉树 6.4.1 线索叉树的基本概念 6.4.2 线索叉树的逻辑表示图 6.4.3 中根次序线索化算法 6.4.4 在中根线索树上检索某结点的前趋或后继 6.4.5 在中根线索树上遍历叉树 6.5 叉树、 树和森林 6.5.1 树的存储结构 6.5.2 树与叉树之间的转换 6.5.3 森林与叉树的转换 6.5.4 一般树或森林的遍历 6.6 树的应用 6.6.1 叉排序树 6.6.2 哈夫曼树及其应用 6.7 叉树的建立和遍历C语言源程序示例 习题六 第7 图 7.1 图的基本概念和术语 7.1.1 图的基本概念 7.1.2 路径和回路 7.1.3 连通图 7.1.4 顶点的度 7.2 图的存储结构 7.2.1 邻接矩阵 7.2.2 邻接链表 7.3 图的遍历和求图的连通分量 7.3.1 图的建立 7.3.2 图的遍历 7.3.3 求图的连通分量 7.4 图的生成树 7.4.1 生成树的概念 7.4.2 最小生成树 7.4.3 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法 7.5 最短路径 7.5.1 单源顶点最短路径问题求解 7.5.2 求有向网中每对顶点间的路径 7.6 有向无环图及应用 7.6.1 拓扑排序 7.6.2 关键路径 7.7 图的算法C语言程序实现举例 7.7.1 无向图的邻接表的建立和遍历 7.7.2 有向无环图的拓扑排序和求关键路径 习题七 第8 查找 8.1 基本概念
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值