数据结构 习题 第五章 多维数组和广义表 (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

相关文章

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常