数据结构 习题 第五章 多维数组和广义表 (C语言描述)

2024-04-30 05:32

本文主要是介绍数据结构 习题 第五章 多维数组和广义表 (C语言描述),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧。

1、单选题
稀疏矩阵一般的压缩存储方法有两种,即( D)
A. 二维数组和三维数组
B. 三元组表和散列
C. 散列和十字链表
D. 三元组表和十字链表

三元组表:将表示稀疏矩阵的非零元素的三元组表按行优先(或列优先)的顺序(跳过零元素),则得到一个其结点均是三元组的线性表,此线性表的顺序存储结构称为三元组表。
三元组表是稀疏矩阵的一种顺序存储结构。
(当非零元素的位置或个数经常发生变化时,三元组表不适合做稀疏矩阵的存储结构)
此时可采用链表做为存储结构更为恰当,如:十字链表

2、判断题
线性表可以看成是广义表的特例,如果广义表中的每个元素都是原子,则广义表便成为线性表.

正确
广义表(Lists):又称列表,是线性表的推广
线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,它可以是一个数或一个结构,若放松对表元素的这种限制,容许它们具有其自身独立的类型结构,这就产生了广义表。
为了区分原子和广义表,书写时用大写字母表示广义表,小写字母表示原子。
一个表的“深度”是指表展开后所含括号的层数。

3、判断题
广义表是线性表的推广,是一类线性数据结构。

错误
广义表不仅是线性表的推广,也是树的推广。

4、填空题
二维数组A[10][20]采用行序为主方式存储,每一个元素点一个存储单元,且A[0][0]的存储地址是200,则A[6][12]的地址是▁▁▁。

答案(填空1):
332

数组中任一元素A[i][j]的存储位置可用下列公式计算:
LOC( A[i][j] ) = LOC ( A[0][0] ) + ( i×n+j ) × L
这是因为数组元素 A[i][j] 的前面有 i 行,每一行的元素个数为 n,在第 i 行中 A[i][j] 的前面还有 j 个数组元素。L 仍然是每个数据元素所占存储单元的个数。
LOC( A[6][12] )= LOC ( A[0][0] ) + (6*20+12)*1 = 200 + 132 = 332

5、单选题
设矩阵A是一个对称矩阵,为了节省存储空间。将其下三角部分按行序存放在一维数组SA[0…n(n+1)/2-1]中,对任一下三角部分元素aij(i≥j)。在一维数组SA的下标位置k的值是( A)
A. i * ( i + 1 ) / 2 + j
B. j * ( j + 1 ) / 2 + i - 1
C. i * ( i - 1 ) / 2 + j
D. j * ( j - 1 ) / 2 + i - 1

6、填空题
广义表(a,(a,b),d,e,((i,j),k))的长度是▁▁▁,深度是▁▁▁。
答案(填空1):
5
答案(填空2):
3

7、单选题
一个 n * n 的对称矩阵,如果以行或列为主序采用压缩存储,其容量为(B)。
A. ( n + 1 ) * ( n + 1 ) / 2
B. ( n + 1 ) * n / 2
C. n * n
D. n * n / 2

8、填空题
有一个10阶对称矩阵A,采用压缩存储方式(以行序为主存储,且A[0][0]=1)。则A[8][5]的地址是▁▁▁。
答案(填空1):
42

(1+8)*8/2+5+1=42

9、单选题
N是一个5×8的二维数组,当N按行优先方式存储时,表示该数组的第10个元素的是(B )
A. N[2][2]
B. N[1][1]
C. N[1][2]
D. N[2][1]

1*8+1=9,N[1][1] 前面有九个元素,它是第十个元素。
下面补充一些关于对称矩阵的内容:

  • 对于一个n阶对称矩阵,第i行(0≤i<n)只需要存储i+1个元素,元素总数为:
    ∑ i = 0 n − 1 ( i + 1 ) = n ( n + 1 ) / 2 \sum_{i=0}^{n-1}(i+1)=\mathrm{n}(\mathrm{n}+1) / 2 i=0n1(i+1)=n(n+1)/2
  • 若i≥j,则A[i][j]在下三角矩阵中,A[i][j] 之前的i行一共有1+2+…+ i =i×(i+1)/2个元素,在第i行上,A[i][j] 之前有j个元素,因此有:
    k=i×(i+1)/2+j
  • 若i<j,则A[i][j]在上三角矩阵中。因为A[i][j] = A[j][i] ,所以只要交换上述对应关系式中的i和j即可得到:
    k=j×(j+1)/2+i
  • 若令I=max(i,j),J=min(i,j),得到:k=I×(I+1)/2+J (0≤k<n×(n+1)/2 )
    因此:
    LOC( A[i][j] ) = LOC( SA[k] ) = LOC( SA[0] ) + k×d
    = LOC(SA[0])+[I×(I+1)/2+J] ×d
  1. 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为8,每个元素占一个地址空间,则a54的地址为( 21

注意,这题是a11为第一元素,而不是a00为第一元素,所以:
4*(4+1)/ 2 + 3 + 8 = 21

  1. 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a00为第一元素,其存储地址为8,每个元素占一个地址空间,则a45的地址为( 27

这里a45是所在位置是上三角矩阵,所以为了方便运算,我们要把它转化为下三角矩阵,转化方法请看上面。
所以变成下三角矩阵以后,使用a54 进行计算:
5*(5+1)/ 2 + 4 + 8 = 15 + 4 + 8 =27

  • 补充:

  • L 表示 每个数据元素所占存储单元的个数。

  • 一维数组中任一元素 A[i] 的存储位置为:
    LOC( A[i] )= LOC (A [0]) + i * L (从0下标开始)
    LOC( A[i] )= LOC (A [1]) + ( i - 1 ) * L (从1下标开始)

  • 二维数组 A[m][n]:
    以行序为主序: LOC( A[i][j] )= LOC (A [0][0]) + ( i * n + j ) * L
    以列序为主序: LOC( A[i][j] )= LOC (A [0][0]) + ( j * m + i ) * L

我把我目前写的关于数据结构 题目的链接全部汇总整理在下面,有需要的小伙伴自己点击哈。

  • 数据结构 习题 第一章 概论
  • 数据结构 习题 第二章 线性表 (C语言描述)
  • 数据结构 习题 第三章 栈和队列 (C语言描述)
  • 数据结构 习题 第四章 串 (C语言描述)
  • 数据结构 习题 第五章 多维数组和广义表(C语言描述)
  • 数据结构 习题 综合复习

实验:

  • 数据结构 实验一 顺序表的操作
  • 数据结构 实验二 链表的基本操作
  • 数据结构 实验三 栈的基本运算
  • 数据结构 实验四 二叉树的操作
  • 数据结构实验五-马踏棋盘
  • 数据结构-顺序表的排序操作-冒泡排序

因为最近还在准备别的考试,所以目前就先更新这么多哈,后面有时间的话,还会再写一篇关于数据结构实验的题目,欢迎大家关注呦!

如果大家觉得对你们有帮助的话,可以点个赞再走吗,嘿嘿。
笔者使用的教材是高等教育出版社唐策善、李龙澍、黄刘生编著的《数据结构——用C语言描述》。
因为都是我自己打字,或者我的答案,可能会有错误的地方,如果有的话,欢迎大家指出。

这篇关于数据结构 习题 第五章 多维数组和广义表 (C语言描述)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948022

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为“C”,“h”,“i”,“n”,“a”,经过运算,使c1,c2,c3,c4,c5分别变成“G”,“l”,“m”,“r”,“e”。分别用put

【数据结构】线性表:顺序表

文章目录 1. 线性表2. 顺序表2.1 概念及结构2.2 接口实现2.3 顺序表的问题及思考 1. 线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

剑指offer(C++)--数组中只出现一次的数字

题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution {public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int len = data.size();if(len<2)return;int one = 0;for(int i

【LinuxC语言】select轮询

文章目录 前言select函数详解selectfd_set类型一个小问题select函数使用步骤改进服务器代码select服务器示例代码 总结 前言 在Linux C语言编程中,我们经常需要处理多个I/O操作。然而,如果我们为每个I/O操作创建一个线程,那么当I/O操作数量增加时,线程管理将变得复杂且效率低下。这就是我们需要select轮询的地方。select是一种高效的I/