数据结构(C语言)第二版 第一章课后答案
这本书,我以后也会用,所以趁着考完试做个整理,顺便分享出来。电子资源发不出来,放评论区吧,有需要自取。
1. 简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
数据
是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象
是性质相同的数据元素的集合,是数据的一个子集。
数据结构
是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构
是数据结构在计算机中的表示。
数据类型
是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型
是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。
2. 试举一个数据结构的例子, 叙述其逻辑结构和存储结构两个层次的含义及相互关系。
例如有一张学生基本信息表,包括学生的学号、姓名、性别、专业、学院等信息。每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。
学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。 这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。 即相同的逻辑结构,可以对应不同的存储结构。
3. 简述逻辑结构的四种基本关系并画出它们的关系图。
集合结构:
数据元素之间除了“属于同一集合”的关系外,别无其他关系。(例如,确定一名学生是
否为班级成员,只需将班级看做一个集合结构。)
线性结构:
数据元素之间存在一对一的关系。(例如,将学生信息数据按照其入学报到的时间先后顺
序进行排列,将组成一个线性结构。)
树结构:
数据元素之间存在一对多的关系。(例如,在班级的管理体系中,班长管理多个组长,每
位组长管理多名组员,从而构成树形结构。)
图结构或网状结构:
数据元素之间存在多对多的关系。(例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构。)
4. 存储结构由哪两种基本的存储方法实现?
1)顺序存储结构
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
2)链式存储结构
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。
5. 选择题
1.C 2.C 3.B 4.D 5.D 6.A
(1) 在数据结构中, 从逻辑上可以把数据结构分成(
C
)。
A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构
C. 线性结构和非线性结构 D. 内部结构和外部结构
(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的(
C
)。
A. 存储结构 B. 存储实现
C. 逻辑结构 D. 运算实现
存储及运算都需考虑数据元素本身的形式、内容等。而逻辑结构中关心元素之间的逻辑关系,与数据元素本身无关。
(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性, 这意味着(
B
)。
A. 数据具有同一特点
B. 不仅数据元素所包含的数据项的个数要相同, 而且对应数据项的类型要一致
C. 每个数据元素都一样
D. 数据元素所包含的数据项的个数要相等
(4)以下说法正确的是(
D
)。
A. 数据元素是数据的最小单位
B. 数据项是数据的基本单位
C. 数据结构是带有结构的各数据项的集合
D. 一些表面上很不相同的数据可以有相同的逻辑结构
数据元素是数据的基本单位
数据项是数据的最小单位
数据结构是带有结构的各数据元素的集合
(5)算法的时间复杂度取决于(
D
)。
A. 问题的规模 B. 待处理数据的初态
C. 计算机的配置 D. A和B
算法的时间复杂度取决于:待处理数据的状态、问题的规模
(6)以下数据结构中,(
A
)是非线性数据结构。
A. 树 B.字符串
C. 队列 D. 栈
如上图中案例
6.试分析下面各程序段的时间复杂度
- O(1)
- O(m*n)
-
O(n
2
) - O(log3n)
-
O(n
2
) - O(log2n)
1)
x=90; y=100;
while(y>0)
if(x>100)
{x=x-10;y–;}
else x++;
答案:O(1)
程序的执行次数为常数阶
2)
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=0;
O(m
n)
语句a[i][j]=0;的执行次数为m
n
3)
s=0;
for i=0; i<n; i++)
for(j=0; j<n; j++)
s+=B[i][j];
sum=s;
O(n2)
语句s+=B[i][j];的执行次数为n2
4)
i=1;
while(i<=n)
i=i*3;
O(log3n)
语句i=i*3;的执行次数为 log3n。
5)
x=0;
for(i=1; i<n; i++)
for (j=1; j<=n-i; j++)
x++;
O(n2)
语句x++;的执行次数为n-1+n-2+……+1= n(n-1)/2
6)
x=n; //n>1
y=0;
while (x>=(y+1) * (y+1))
y++;
O(log2n)
语句y++;的执行次数为 log2n。