数组课后作业

合集下载

第2章 递归与分治_作业答案讲解

第2章 递归与分治_作业答案讲解

具体执行过程:求最大值
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5 0 1 2 3 4 5 6 24 -13 29 113 87 65 -9 0 1 2 3 24 -13 29 113 0 1 24 -13 2 3 29 113 4 5 6 87 65 -9 7 8 9 10 11 12 13 36 14 76 44 83 67 5 7 8 9 10 36 14 76 44 7 8 36 14 7 36 9 10 76 44 11 12 13 83 67 5 11 12 83 67 11 83 12 67 13 5
课后练习
• 练习2:分析如下时间函数的复杂度,并说明 原因。 1. 利用递归树说明以下时间函数的复杂度:
O(1) T ( n) 3T ( n ) O( n) 4 n1 n1
2. 利用主定理说明以下时间函数的复杂度:
T(n) = 16T(n/4) + n
T(n) = T(3n/7) + 1
课后练习
• 练习1:给定数组a[0:n-1], 1. 试设计一个分治法算法,找出a[0:n-1]中元素最 大值和最小值; 2. 写出该算法时间函数T(n)的递推关系式; 3. 分析该算法的时间复杂度和空间复杂度。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5
• 递归公式:
– 设n个元素的集合可以划分为F(n,m)个不同的由 m个非空子集组成的集合。 F(n,m) = 1, when n=0, n=m, n=1, or m=1 F(n,m) = 0, when n<m 否则 F(n,m)=F(n-1,m-1)+m*F(n-1,m)

c语言课后答案

c语言课后答案

《C程序设计》课外作业及参考答案说明:(1)章节顺序按照PowerPoint电子教案;(2)教材上的作业注明了章节和题号;(3)所用教材是《C程序设计(第二版)》谭浩强清华大学出版社;第一章C语言概述1.1 简答题:写出C语言的主要特点(教材习题1.1)。

1.2填空题:1.C语言与操作系统并称“栾生兄弟”。

2.C语言俗称为形式。

3.C源程序文件经过处理后产生目标文件,目标文件经处理后生成可执行文件。

1.3 单项选择题1. 以下说法中正确的是。

(A)C语言程序总是从第一个定义的函数开始执行(B)在C语言程序中,要调用的函数必须在main函数中定义(C)C语言程序总是main函数开始(D)C语言程序中的main函数必须放在程序的开始部分2. 以下正确的C标识符是。

(A)_125 (B)C# (C)C++ (D)A$1.4 多项选择题1. 以下关于C语言的说法中,错误的是。

(A)俗称为“低级语言的高级形式”,因此功能简单(B)不是结构化程序设计语言(C)可能直接访问内存(D)语法限制不严2. 以下标识符属于C语言关键字的有。

(A)integer (B)else (C)include (D)while第二章C语言基本数据类型、变量、常量与表达式2.1简答题1.求下面算术表达式的值。

(教材习题3.9)a)x+a%3*(int)(x+y)%2/4设x=2.5, a=7, y=4.7b)(float)(a+b)/2+(int)x%(int)y设a=2, b=3, x=3.5, y=2.52.写出下面程序的运行结果。

(教材习题3.10)main(){ int i, j, m, n;i=8; j=10; m=++i; n=j++;printf("%d,%d,%d,%d", i, j, m, n);}3.写出下面表达式运算后a的值,设原来a=12。

设a和n已定义为整型变量。

(教材习题3.12)a)a+=a b) a-=2 c) a*=2+3b)d) a/=a+a e) a%=(n%=2), n的值等于5 f) a+=a-=a*=a4.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?2.2 填空题1. 写出下面各逻辑表达式的值。

《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。

它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。

1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。

其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。

1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。

每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。

1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。

通过运算符和表达式可以进行各种数值计算和逻辑判断。

第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。

整型数据类型可以表示整数值,并具有不同的取值范围。

2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。

浮点型数据可以表示较大或较小的数值,并具有一定的精度。

2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。

字符型数据可以用于表示各种字符(包括字母、数字、符号等)。

2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。

《数据结构与算法》课后答案

《数据结构与算法》课后答案

《数据结构与算法》课后答案课后习题解答判断题1.线性表的逻辑顺序与存储顺序总是一致的。

2.顺序存储的线性表可以按序号随机存取。

3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。

5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

7.线性表的链式存储结构优于顺序存储结构。

8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

11.静态链表既有顺序存储的优点,又有动态链表的优点。

所以它存取表中第i个元素的时间与i无关。

12.线性表的特点是每个元素都有一个前驱和一个后继。

算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。

试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。

【提示】直接用题目中所给定的数据结构,因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,然后插入x ,最后修改表示表长的变量。

int insert (datatype A,int *elenum,datatype x) elenum为表的最大下标*/ {if(*elenum==arrsize-1) return 0; 法插入*/ else {i=*elenum; while (i>=0 && A[i]>x) 边移动*/ {A[i+1]=A[i]; i--; } A[i+1]=x; /*找到的位置是/*边找位置/*表已满,无/*设插入位的下一位*/ (*elenum)++; return 1; } } 时间复杂度为O(n)。

数据结构课后习题及答案

数据结构课后习题及答案

填空题(10 *1’ = 10' )一、概念题2。

2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。

2。

3。

当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。

2。

6。

带头结点的单链表L中只有一个元素结点的条件是L—〉Next->Next==Null。

3。

6。

循环队列的引入,目的是为了克服假溢出.4。

2。

长度为0的字符串称为空串。

4。

5.组成串的数据元素只能是字符。

4。

8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。

7.2。

为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。

5.7。

广义表的深度是广义表中括号的重数7。

8.有向图G可拓扑排序的判别条件是有无回路。

7.9。

若要求一个稠密图的最小生成树,最好用Prim算法求解。

8。

8.直接定址法法构造的哈希函数肯定不会发生冲突。

9。

2。

排序算法所花费的时间,通常用在数据的比较和交换两大操作。

1。

1。

通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。

1。

2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。

1。

3。

存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。

1。

4。

抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

1。

5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。

2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s—〉prior= p—〉prior; s-〉next= p; p-〉prior- next= s;p-〉prior= s;。

2.9。

在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。

数据结构(第二版)课后习题答案(王红梅主编)

数据结构(第二版)课后习题答案(王红梅主编)

第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。

【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。

【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。

【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

算法设计与分析第三版第四章课后习题答案

算法设计与分析第三版第四章课后习题答案

算法设计与分析第三版第四章课后习题答案4.1 线性时间选择问题习题4.1问题描述:给定一个长度为n的无序数组A和一个整数k,设计一个算法,找出数组A中第k小的元素。

算法思路:本题可以使用快速选择算法来解决。

快速选择算法是基于快速排序算法的思想,通过递归地划分数组来找到第k小的元素。

具体步骤如下: 1. 选择数组A的一个随机元素x作为枢纽元。

2. 使用x将数组划分为两个子数组A1和A2,其中A1中的元素小于等于x,A2中的元素大于x。

3. 如果k等于A1的长度,那么x就是第k小的元素,返回x。

4. 如果k小于A1的长度,那么第k小的元素在A1中,递归地在A1中寻找第k小的元素。

5. 如果k大于A1的长度,那么第k小的元素在A2中,递归地在A2中寻找第k-A1的长度小的元素。

6. 递归地重复上述步骤,直到找到第k小的元素。

算法实现:public class LinearTimeSelection {public static int select(int[] A, int k) { return selectHelper(A, 0, A.length - 1, k);}private static int selectHelper(int[] A, int left, int right, int k) {if (left == right) {return A[left];}int pivotIndex = partition(A, left, righ t);int length = pivotIndex - left + 1;if (k == length) {return A[pivotIndex];} else if (k < length) {return selectHelper(A, left, pivotInd ex - 1, k);} else {return selectHelper(A, pivotIndex + 1, right, k - length);}}private static int partition(int[] A, int lef t, int right) {int pivotIndex = left + (right - left) / 2;int pivotValue = A[pivotIndex];int i = left;int j = right;while (i <= j) {while (A[i] < pivotValue) {i++;}while (A[j] > pivotValue) {j--;}if (i <= j) {swap(A, i, j);i++;j--;}}return i - 1;}private static void swap(int[] A, int i, int j) {int temp = A[i];A[i] = A[j];A[j] = temp;}}算法分析:快速选择算法的平均复杂度为O(n),最坏情况下的复杂度为O(n^2)。

课后作业答案

课后作业答案

x1 6.00 x 0.96 2 x 0.02 3
(1.3)
3.10 6.00 0.500 1.10 3.10 6.00 0.500 1.10 5 0.96 6.5 0.96 0 10.0 24.5 59.0 2 4.5 0.36 0.02 0 0.1 12.0 24.0 3.10 6.00 0.500 1.10 0 10.0 24.5 59.0 0 12.2 24.6 0
F
4 25 16 1 9 16 4 4 79
第二章 1、 在三位十进制的限制下,分别用顺序 Gauss 消去法和列主元消去法,求解方程组
0.500 1.10 3.10 5 0.96 6.5 4.5 0.36 2
解: 顺序 Gauss 消去法: 消元后为:
(1) 用 u
2.14 作为 u x 的近似值
2.14 ( 1.231) 2.14 / 1.231 作为 u xy x / y 的近似值 (2) 用 u
解:
(1) u
2.14 1.46287 0.005 0.00170896 2 2.14
) f ( x ) ( x ) (u
所以除了数组的前面 r 列和后面的 s 列外,其余都是 r+s+1 个元, 从而对于矩阵乘积
ui Ai , j y j Ci j s 1, j y j
j 1 j 1
n
n
(1.4)
利用矩阵的结构,可以知道
ui
min( n ,i s ) j max(1,i r )
( k 1) x3 0.2 x1( k ) 0.4 x2 ( k ) 2

数据结构教程李春葆课后答案第6章数组和广义表

数据结构教程李春葆课后答案第6章数组和广义表

3. 如果某个一维数组 A 的元素个数 n 很大,存在大量重复的元素,且所有元素值相同 的元素紧挨在一起,请设计一种压缩存储方式使得存储空间更节省。
答:设数组的元素类型为 ElemType,采用一种结构体数组 B 来实现压缩存储,该结构 体数组的元素类型如下:
struct { ElemType data;
解:从二维数组 B 的右上角的元素开始比较。每次比较有三种可能的结果:若相等, 则比较结束;若 x 大于右上角元素,则可断定二维数组的最上面一行肯定没有与 x 相等的 数据,下次比较时搜索范围可减少一行;若 x 小于右上角元素,则可断定二维数组的最右 面一列肯定不包含与 x 相等的数据,下次比较时可把最右一列剔除出搜索范围。这样,每 次比较可使搜索范围减少一行或一列,最多经过 m+n 次比较就可找到要求的与 x 相等的元 素。对应的程序如下:
{ printf("不是对角矩阵\n");
return false;
}
for (int i=0;i<a.nums;i++)
if (a.data[i].r==a.data[i].c) //行号等于列号
sum+=a.data[i].d;
return true;
}
11. 设计一个算法 Same(g1,g2),判断两个广义表 g1 和 g2 是否相同。 解:判断广义表是否相同过程是,若 g1 和 g2 均为 NULL,则返回 true;若 g1 和 g2 中一个为 NULL,另一不为 NULL,则返回 false;若 g1 和 g2 均不为 NULL,若同为原子 且原子值不相等,则返回 false,若同为原子且原子值相等,则返回 Same(g1->link,g2->link), 若同为子表,则返回 Same(g1->val.sublist,g2->val.sublist) & Same(g1->link,g2->link)的 结果,若一个为原子另一个为子表,则返回 false。对应的算法如下:

数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版
Push( &s, t[i]);
while( !EmptyStack( &s))
{// 每弹出一个字符与相应字符比较
temp=Pop (&s);
if( temp!=S[i]) return 0 ;// 不等则返回0
else i++;
}
return 1 ; // 比较完毕均相等则返回 1
}
(7)假设以数组Q[m]存放循环队列中的元素,同时设置一个标志tag,以tag==0和tag ==1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(enqueue)和删除(dlqueue)算法。
t串
a b c a a b b a b c a b
next[j]
0 1 1 1 2 2 3 1 2 3 4 5
nextval[j]
0 1 1 0 2 1 3 0 1 1 0 5
(3)数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。求:
(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)
(6)O( )

1.选择题
babadbcabdcddac
2.算法设计题
(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){
if(L->next==NULL) return NULL;
rear=(rear+ 1 ) %m;//队尾位置进1,队尾指针指示实际队尾位置

vb课后练习答案习题解答 (5).

vb课后练习答案习题解答 (5).

第5章数组与记录5.1 填空题1.若要定义一个包含10个字符串元素,且下界为1的一维数组s,则数组说明语句为(。

答案:Dim s(1 To 10 As String2.若要定义一个元素为整型数据的二维数组a,且第一维的下标从0到5,第二维下标从-3到6,则数组说明语句为(。

答案:Dim a(0 To 5,-3 To 6 As Integer3.如果数组元素的下标值为实数,则VB系统会按(进行处理。

答案:四舍五入原则4.数组元素个数可以改变的数组称为(;数组元素可以存放不同类型数据的数组称为(。

答案:可调数组、可变类型数组5.数组刷新语句用于(。

若被刷新的数组是数值数组,则把所有元素置(;若被刷新的数组为字符串数组,则把所有元素置(。

答案:清除指定数组内容、0、空字符串10.控件数组是由一组类型和(相同的控件组成,共享(。

答案:名字、同一个事件过程11.控件数组中的每一个控件都有唯一的下标,下标值由(属性指定。

答案:Index12.建立控件数组有两种方法:(和(。

答案:在设计阶段通过相同Name属性值来建立、在程序代码中使用Load方法5.2 选择题1.下列一维数组说明语句错误的是(。

a Dim b(100 AS Doubleb Dim b(-5 To 0 AS Bytec Dim b(-10 To –20 AS Integerd Dim b(5 To 5 AS String答案:c2.若有数组说明语句为:Dim a(-3 To 8,则数组a包含元素的个数是(。

a 5b 8c 11d 12答案:d3.设有数组说明语句:Dim c(1 To 10,则下面表示数组c的元素选项中(是错误的。

a c(i-1b c(5+0.5c c(0d c(10答案:c4.下列数组说明语句中正确的是(。

a Dim a(-1 To 5,8AS Stringb Dim a(n,nAS Integerc Dim a(0 To 8,5 To –1AS Singled Dim a(10,-10AS Double答案:a5.设有数组说明语句:Dim b(-1To2,-2To2,则数组b中元素的个数是(。

李春葆《数据结构教程》(C++语言描述)课后习题(第5~8章)【圣才出品】

李春葆《数据结构教程》(C++语言描述)课后习题(第5~8章)【圣才出品】

三、算法设计题 (1)设定二维整数数组 B[0..m-1,0..n-1]的数据在行、列方向上都按从小到大的顺序 排序,且整型变量 x 中的数据在 B 中存在。试设计一个算法,找出一对满足 B[i,j]=x 的 i、 j 值,要求比较次数不超过 m+n。 答: void FindX(int &a,int x) {
(4)一个稀疏矩阵经过压缩后,和直接采用二维数组存储相比会失去______特性。 A.顺序存储 B.随机存取 C.输入/输出 D.以上都不对 【答案】B 【解析】稀疏矩阵可以采用三元组顺序表或是十字链表压缩存储,无论采取哪种方式, 均会使稀疏矩阵不再具有随机存取功能,答案为 B 项。
(5)当 m 行 n 列的稀疏矩阵采用十字链表表示时,其中单链表的个数为______。
(3)简述广义表、数组和线性表之间的异同。 答:一维数组可以看做是一个线性表,类似的也可以采用链式存储和顺序存储结构,但 是在计算机中直接将其视为连续的存储单元集合,二维数组同理可以视为每一个元素都是相 同类型的线性表的线性表,以此类推,任何多维数组都可以看做是线性表,其中每一个数据 元素也是一个线性表,所以说多维数组是线性表的推广。 广义表也是线性表的推广,其一般表示业余线性表相同,只不过其每一个元素既可以是 一个线性表,也可以是一个单个数据元素(原子),而线性表中的每一个元素只能是单个的 数据,这也就使得广义表一般只能用链式结构来表示,二线性表可以用顺序结构和链式结构 表示。
答:下三角矩阵的示意图如下图所示:
4 / 73
圣才电子书

十万种考研考证电子书、题库视频学习平台
a00 a10a11 a20a31a32 aij a 1 ij
在 A[i,j]之前共有 i 行,每行元素个数递增,同时此行有 j 个元素在其之前,因此其前

数据结构课后习题(第4-5章)

数据结构课后习题(第4-5章)

【课后习题】第4章 串 第5章 数组和广义表网络工程2010级( )班 学号: 姓名:题 号 一 二 三 四 总分 得 分一、填空题(每空1分,共30分)1. 串有三种机内表示方法: 、 和 ,其中前两种属于顺序存储结构,第三种属于 。

2. 若n 为主串长度,m 为子串长度,则串的BF (朴素)匹配算法最坏的情况下需要比较字符的总次数为 ,T(n)= 。

3. 是任意串的子串;任意串S 都是S 本身的子串,除S 本身外,S 的其他子串称为S 的 。

4. 设数组a[1…50, 1…60]的基地址为1000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。

5. 对于数组,比较适于采用 结构够进行存储。

6. 广义表的深度是指_______。

7. 将一个100100 A 的三对角矩阵,按行优先存入一维数组B[297]中,A 中元素66,66A 在B 数组中的位置k 为 。

8. 注意:a i,j 的k 为 2(i-1)+j-1,(i=1时j=1,2;1<i<=n 时,j=i-1,i,i+1) 。

9. 称为空串; 称为空白串。

10. 求串T 在主串S 中首次出现的位置的操作是 ,其中 称为目标串, 称为模式。

11. 对称矩阵的下三角元素a[i,j],存放在一维数组V 的元素V[k]中(下标都是从0开始), 12. k 与i ,j 的关系是:k= 。

13. 在n 维数组中每个元素都受到 个条件的约束。

14. 同一数组中的各元素的长度 。

15. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。

16.稀疏矩阵中有n个非零元素,则其三元组有行。

17.求下列广义表操作的结果:18.(1)GetHead【((a,b),(c,d))】=== ;19.(2)GetHead【GetTail【((a,b),(c,d))】】=== ;20.(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;21.(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;22.广义表E=(a,(b,E)),则E的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。

河南理工大学C语言课后习题答案精解第六章

河南理工大学C语言课后习题答案精解第六章

a[1][1] a[1][2] a[1][3] 1 0 -1
a[2][1] a[2][2] a[2][3] 2 1 0
a[3][1] a[3][2] a[3][3]
0 1 2
0 1
0
第六章 数组
2. 写出程序的运行结果
(4) 程序四:
#include <stdio.h> main( ) { int i, s; i的ASCII码为105 char s1[100], s2[100]; printf(“input string1:\n”); n的ASCII码为110 gets(s1); printf(“input string2:\n”); gets(s2); s=-5 i=0; while((s1[i]==s2[i]) && (s1[i]!=„\0‟)) i++; if((s1[i] ==„\0‟) && (s2[i]==„\0‟)) s=0; 输入数据: aid else s=s1[i]-s2[i]; printf(“%d\n”,s); and }
B.a[a[4]]
C. a[a[3]]
D. a[a[5]]
第六章 数组
1. 选择题 (6) 要求定义包含8个int类型元素的一维数组,以下错误的定义 语句是 A A. int N=8; B. #define N 3 int a[N]; int a[2*N+2]; C. int a[ ]={0,1,2,3,4,5,6,7} D. int a[1+7]={0}
第六章 数组
3. 程序填空 (3)把一个整数转换成 #include <stdio.h> #define M 80 void main() { long int n=1234567; char s[M]; int j=0; while ( n!=0 ) { s[j]= n%10+’0’; n/=10; j++; } s[j]='\0' ; printf("\n%s",s); }

数据结构课后习题答案第五章数组与广义表

数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000。

计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。

问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。

试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。

答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。

(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。

答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。

如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。

2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。

答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。

遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。

---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。

答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。

如果存在环,则两个指针必定会相遇。

2. 题目:给定一个链表,删除链表的倒数第N个节点。

答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。

此时第二个指针指向的节点即为要删除的节点。

---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。

答案:使用辅助栈来保存当前栈中的最小元素。

每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。

2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。

答案:使用双端队列来保存当前队列中的最大值。

每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。

---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。

答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。

如果任意节点的差值大于1,则该二叉树不是平衡二叉树。

实用数据结构基础(第四版)课后习题

实用数据结构基础(第四版)课后习题

一、判断题(第一章绪论)1.数据元素是数据的最小单元。

答案:错误2.一个数据结构是由一个逻辑结构和这个逻辑结构上的基本运算集构成的整体。

答案:错误3.数据的存储结构是数据元素之间的逻辑关系和逻辑结构在计算机存储器内的映像。

答案:正确4.数据的逻辑结构是描述元素之间的逻辑关系,它是依赖于计算机的。

答案:错误5.用语句频度来表示算法的时间复杂度的最大好处是可以独立于计算机的软硬件,分析算法的时间答案:正确(第二章线性表)6.取顺序存储线性表的第i个元素的时间同i的大小有关。

答案:错误7.线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。

答案:正确8.线性链表的每一个节点都恰好包含一个指针域。

答案:错误9.顺序存储方式的优点的存储密度大,插入和删除效率不如练市存储方式好。

答案:正确10.插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。

答案:错误(第三章栈)11.栈是一种对进栈和出栈作了限制的线性表。

答案:错误12.在C(或C++)语言中设顺序栈的长度为MAXLEN,则top=MAXLEN表示栈满。

答案:错误13.链栈与顺序栈相比,其特点之一是通常不会出现满栈的情况。

答案:正确14.空栈就是所有元素都为0上的栈。

答案:错误15.将十进制数转换为二进制数是栈的典型应用之一。

答案:正确(第四章队列)16.队列式限制在两端进行操作的线性表。

答案:正确17.判断顺序队列为空的标准是头指针和尾指针都指向同一结点。

答案:错误18.在循环链列队中无溢出现像。

答案:错误19.在循环队列中,若尾指针rear大于头指针front,则元素个数为rear-front。

答案:正确20.顺序队列和循环队列关于队满和队空的判断条件是一样的。

答案:错误(第五章串)21.串是n个字母的有限序列。

答案:错误22.串的堆分配存储是一种动态存储结构。

答案:正确23.串的长度是指串中不同字符的个数。

VB程序设计教案,数组12,数组复习题,附答案

VB程序设计教案,数组12,数组复习题,附答案
Next j
Print
Next i
For i = 1 To()
For j = 1 To()
()
Next j
Next i
For i = 1 To n
For j = 1 To m
Print d2(i, j)
Next j
Print
Next i
End Sub
16.下列程序的功能是随机产生10个两位整数并输出,然后进行排序输出,请在空白处填入相应的语句,使之完成上述功能。
3 2 3
B.1 2 3
1 2 3
1 2 3
C.1 2 3
2 4 6
3 6 9
D.1 1 1
2 2 2
3 3 3
21.下述语句的运行结果是()
Private Sub Command1_Click()
Dim a
i = 0
a = Array(1, -2, 9, 0, -1, 9)
Do
k = a(i)
For m = 10 To k Step -2
B.控件数组的每一个控件共享同样的事件过程
C.控件数组中的每一个元素的下标由控件的index属性指定
D. 控件数组中的每一个元素只能有相同的属性设置
24.在窗体上画3个单选按钮,组ห้องสมุดไป่ตู้一个名为Chkoption的控件数组,用于标识数组下标的参数()。
A.Tag
B.Index
C.ListIndex

Next i
For i = 1 To()
t = x(i)
()
()
Next i
For i = 1 To n
Label2.Caption = Label2.Caption & x(i) & ""

数据结构(C++版)课后答案 (王红梅)第4章 广义线性表多维数组和广义表

数据结构(C++版)课后答案 (王红梅)第4章 广义线性表多维数组和广义表

第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。

除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。

⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。

【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。

⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。

【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。

⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。

【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。

【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。

【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。

A 90B 180C 240D 540E 108F 114G 54H A[8][5] I A[3][10] J A[5][8] K A[4][9]【解答】D,E,K【分析】数组A为9行10列,共有90个元素,所以,存放A至少需要90×6=540个存储单元,第8列和第5行共有18个元素(注意行列有一个交叉元素),所以,共占108个字节,元素A[8][5]按行优先存储的起始地址为d+8×10+5=d+85,设元素A[i][j]按列优先存储的起始地址与之相同,则d+j×9+i=d+85,解此方程,得i=4,j=9。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、判断一个数组{1,2,3,1,0}中是否存在相同的元素,如果存在相同的元素则输出“重复”,否则输出“不重复”。

2、编写一个程序,求出整数数组中最小元素和最大元素的下标,如果这样的元素个数不止一个,则返回最小的数的下标和最大的数的下标。

3、现在有如下一个数组:int
oldArr[]={1,2,5,4,0,0,5,5,0,6,7};要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组newArr[];并输出两个数组中的所有元素值。

4、自己定义两个整型数组a[]和b[],初始化
数组a,循环输入值到数组b,然后将a,b两个数组合并为数组c,按升序(从低到高)排列。

并输出数组a,b,c的值。

5、有一个数组,请按从大到小的顺序排好序,然后输入一个数,要求按原来排序的规律将它插入数组中。

如:排序后的数组为:54,48,
35,23,21,12,8,4, 插入40,则应插入到48和35之间。

6、编写程序,在5行7列的二维数组中查找第一次出现的负数。

7、编写程序,定义数组int
a[4][6],b[4][6],c[4][6],并完成如下操作:
(1)从键盘上输入数据给数组a,b;
(2)将数组a与数组b各对应元素作比较,如果相等,则数组c的对应元素为0,若前者大于后者,则数组c的对应元素为1;若前者小于后者,则数组c的对应元素为-1;
(3)输出数组c各元素的值。

8、读以下程序并注释,并分析运行结果。

(1)
#include<stdio.h>
int main()
{ int a[10],t,av,sum=0,i,j;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<9;i++)
sum=sum+a[i];
av=sum/8;
printf("%d",av);
return 0;
}这代码是求总和与前把项的平均值
(2)
int main()
{ int i,a[5],min,p;
for(i=0;i<5;i++)
{ scanf("%d",&a[i]);}
min=a[0];p=0;
for(i=1;i<5;i++)
{ if(a[i]<min)
{min=a[i];p=i;}
}
printf("%d",p);
return 0;
}求最小值。

相关文档
最新文档