第4章 数组q

合集下载

数据结构第四章 数组

数据结构第四章 数组

4.2
数组的存储结构
通常采用顺序存储结构 顺序存储结构 以二维数组Amn为例
行优先 a00 a01 … a0(n-1) a10 a11 … a1(n-1) … a(m-1)0 a(m-1)1 … a (m-1)(n-1) 列优先
Loc(aij)=Loc(a00)+(i×n+j)×k
a00 a10 … a (m-1)0 a01 a11 … a (m-1) 1 … a0(n-1) a1(n-1) … a (m-1)(n-1)
0 0 -3 0 0 15 12 0 0 0 18 0 9 0 0 24 0 0 0 0 0 0 0 -7 0 0 14 0 0 0
(以转置运算为例) 以转置运算为例)
0 0 0 0 0 0
M
转置后
0 12 9 0 0 0
0 0 0 0 0 0
–3 0 0 0 14 0
0 0 15 0 18 0 24 0 0 0 0 -7 0 0 0 0 0 0
思路:反复扫描a.data中的列序,从小到大依次进行转置。 思路:反复扫描a.data中的列序,从小到大依次进行转置。 a.data中的列序
col
三 元 组 表 a.data (0, 1, 12) ③ 1 (0, 2, 9 ) ⑤ 0 (2, 0, -3) ① (2, 4, 14) (3, 2, 24) 1 (4, 1, 18) 0 (5, 0, 15) (5, 3, -7)
其中,sb[n(n+1)/2]中存放着常数 中存放着常数。 其中,sb[n(n+1)/2]中存放着常数。
三、稀疏矩阵的压缩存储
稀疏矩阵:设矩阵A中有s个非零元素, 稀疏矩阵:设矩阵A中有s个非零元素,若 远远小于矩阵元素的总数( s远远小于矩阵元素的总数(即s≦m×n), 则称A为稀疏矩阵。 则称A为稀疏矩阵。

Pyhton实用教程 第4章 数组操作

Pyhton实用教程 第4章 数组操作

定义一个空的列表 定义一个项为数字0,1,2的列表
解释
3 L = [‘abc’, [‘def’, ‘ghi’]] 定义一个项为字符串,列表的列表
4
L = list(‘this is a list’) 使用list函数定义列表,同语句L = ['l', 'i', 's', 't']含义一样
5
L = list(range(-8, 4)) 使用list函数定义列表,同语句L = [-1, 0, 1, 2]含义一样
输出语句执行次数为: n+(n-1)+(n-2)+(n-3)+……+1, 值为n²/2+n/2。根据性质2 和性质3可得时间复杂度 为O(n2)
制定键值和值,注意:,{} 删除键值“C”和与其对应的值 指定输出键值为“H”的值
PAGE 11
4.2 字典
创建一个字典,存有周期表中的前5个元素
输出: Hydrogen ('H', 'Hydrogen') ('He', 'Helium') ('Li', 'Lithium') ('Be', 'Beryllium') ('B', 'Boron')
8
15
19
17
5
8
15
17
19
PAGE 20
4.4 排序与查找
4.4.1 冒泡排序
输出: [5, 8, 15, 17, 19]

17
5
19
8

汇编语言程序设计(第四版)第4章【课后答案】

汇编语言程序设计(第四版)第4章【课后答案】

汇编语言程序设计(第四版)第4章【课后答案】汇编语言程序设计第四版【课后习题答案】--囮裑為檤第4章基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。

〔解答〕思路:首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。

传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov cx,7mov si,1again: mov al, byte ptr qvar[si]mov byte ptr qvar[si-1],alinc siloop againtest al,80hjz ezzmov bl,0ffhjmp doneezz: mov bl,0done: mov byte ptr qvar[7],bl.exit 0end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。

〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。

.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF位mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移P50inc siloop againdec dxjnz lpp.exit 0.end〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。

数据结构_中国人民解放军陆军工程大学中国大学mooc课后章节答案期末考试题库2023年

数据结构_中国人民解放军陆军工程大学中国大学mooc课后章节答案期末考试题库2023年

数据结构_中国人民解放军陆军工程大学中国大学mooc课后章节答案期末考试题库2023年1.排序的时间复杂度不受数据初始状态影响而恒为O(nlogn)的是()。

参考答案:堆排序2.设栈S和队列Q的初始状态都为空,元素A,B,C,D,E,F依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是BDCFEA,则栈的容量至少应该存元素?参考答案:33.将元素“42,30,74,56,15,60”依次插入开始为空的检索树,那么不成功查找的平均查找长度为____。

参考答案:34.设有正文AADBAACACCDACACAAD,字符集为A、B、C、D,设计一套二进制编码,使得上述正文的编码最短,其总码长为。

参考答案:315.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是。

参考答案:快速排序6.一组记录的排序码为{79,46,84,38,40,56},则利用堆排序(建立小根堆)的方法建立的初始堆为 ____。

参考答案:38,40,56,46,79,847.在对一组记录{54,38,96,23,15,72,60,45,83}进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较次。

参考答案:38.对于下图中的加权图,其最小生成树的边长之和等于______。

【图片】参考答案:159.G是一个非连通无向图,共有28条边,则该图至少有个顶点。

参考答案:810.在一棵二叉树中,度为2的结点有5个,度为1的结点有6个,则叶子结点数有_________个。

参考答案:611.在下图中,A到F的最短路径为:_______。

【图片】参考答案:AD、DF12.用下图求得的最小生成树中,A到F的路径为:_______。

【图片】参考答案:AC、CD、DF13.使用普里姆算法构造出如图所示的图G的一棵最小生成树,从顶点1出发依次得到的最小生成树的序列为。

【图片】参考答案:(1,3)1,(3,6)4,(6,4)2,(3,2)5,(2,5)314.一个有n个顶点的无向图最多有条边。

数据结构第4章数组和串

数据结构第4章数组和串
1
● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储

VB课件(新)第四章数组

VB课件(新)第四章数组
…, {表达式n1,表达式n2, … ,表达式nm} }
语法说明: 1、不能在显式赋初值时,定义数组每个维度的大小 2、数据类型1 与 数据类型2 必须兼容 3、表达式: 可以是常量、变量 4、数组的大小由初值的个数决定
数组的初始化
2、显式初始化: 即声明数组的同时,为数组元素赋初值
一维数组声明并初始化语法格式: Dim 数组名 ( ) As 数据类型 = New 数据类型 (数组大小 ) { [表达式1, 表达式2,…, 表达式n ] } 二维数组声明并初始化语法格式: Dim 数组名 ( , ) As 数据类型 = New 数据类型 ( , ) {
定长数组的声明举例
Dim A(9) AS Integer Dim B(0 to 9) as single Dim c% (0 to 3) Dim d(100), f% (0, 30) Dim g (0 to 4, 0 to 5), h(11) as double
数组的初始化
1、隐式初始化:
数值型:0 字符型:空串("”) 日期型:01/01/0001 00:00:00 对象型:Nothing
mark(0, 4) mark(1, 4) mark(2, 4) mark(3, 4) mark(4, 4)
mark(0, 5) mark(1, 5) mark(2, 5) mark(3, 5) mark(4, 5)
声明了一个整型的二维数组 mark;共占据5×6个整型变量 的内存空间 。二维数组内存分配以行为单位连续分配
Char1 = UCase(Chr(Int(Rnd() * 128))) If Char1 = "A" Then a += 1 If Char1 = "B" Then b += 1 If Char1 = "C" Then b += 1 …… If Char1 = "Y" Then y += 1 If Char1 = "Z" Then z += 1 Next MsgBox("各个字母(不区分大小写)的出现频率:A 是" & a & ",B是" & b & ",C是" & c & ",”……”)

数据结构(第二版)习题谜底第4章[基础]

数据结构(第二版)习题谜底第4章[基础]

数据结构(第二版)习题答案第4章第4章字符串、数组和特殊矩阵4.1稀疏矩阵常用的压缩存储方法有(三元组顺序存储)和(十字链表)两种。

4.2设有一个10 × 10的对称矩阵 A采用压缩方式进行存储,存储时以按行优先的顺序存储其下三角阵,假设其起始元素 a00的地址为 1,每个数据元素占 2个字节,则 a65的地址为( 53 )。

4.3若串S =“software”,其子串的数目为( 36 )。

4.4常对数组进行的两种基本操作为(访问数据元素)和(修改数组元素)。

4.5 要计算一个数组所占空间的大小,必须已知(数组各维数)和(每个元素占用的空间)。

4.6对于半带宽为 b的带状矩阵,它的特点是:对于矩阵元素 aij,若它满足(|i-j|>b),则 aij = 0。

4.7字符串是一种特殊的线性表,其特殊性体现在(该线性表的元素类型为字符)。

4.8试编写一个函数,实现在顺序存储方式下字符串的 strcompare (S1,S2)运算。

【答】:#include <stdio.h>#include <string.h>#define MAXSIZE 100typedef struct{char str[MAXSIZE];int length;}seqstring;/* 函数 strcompare()的功能是:当 s1>s2时返回 1,当 s1==s2时返回 0,当 s1<s2时返回-1*/int strcompare(seqstring s1,seqstring s2){ int i,m=0,len;len=s1.length<s2.length ?s1.length:s2.length;for(i=0;i<=len;i++)if(s1.str[i]>s2.str[i]){m=1;break;}else if(s1.str[i]<s2.str[i]){m=-1;break;}return m;}int main(){ seqstring s1,s2;int i,m;printf("input char to s1:\n");gets(s1.str);s1.length=strlen(s1.str);printf("input char to s2:\n");gets(s2.str);s2.length=strlen(s2.str);m=strcompare(s1,s2);if(m==1) printf("s1>s2\n");else if(m==-1) printf("s2>s1\n");else if(m==0) printf("s1=s2\n");}4.9试编写一个函数,实现在顺序存储方式下字符串的replace(S,T1,T2)运算。

数据结构(C语言版)第三四章习题答案解析

数据结构(C语言版)第三四章习题答案解析

第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。

A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。

A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。

A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。

A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则计算fact(n)需要调用该函数的次数为()。

A. n+1 B. n-1 C. n D. n+2 (6)栈在()中有所应用。

A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。

主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。

该缓冲区的逻辑结构应该是()。

A.队列 B.栈 C.线性表 D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。

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

第4章数组
1.单项选择题
(1)以下一维数组定义正确的是()
(A)int ia (5) ; (B)int inum = 5 , ia [inum] ; (C)int ia [SZ] ; ( SZ为符号常量) (D)int inum ; scanf ( "%d" , & inum ) ; int ia [inum] ;
(2)已有定义:int ia [6] ;下面哪一个是对数组元素的错误引用?
(A)ia [0](B)ia [3](C)ia [7 - 2](D)ia [6]
(3)若有以下说明,
int ia [12] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } ;
char ch = 'a' , cg = 97 ;
则数值为4的表达式是()
(A)ia [cg-ch](B)ia [4](C)ia ['d' - 'c'](D)ia ['d' - ch]
(4)设char cs [20] = "\ta\017bc" ; 则函数strlen ( cs )的返回值为()
(A) 8 (B) 5 (C) 20 (D) 9
(5)设有数组定义:char carray [ ] = "hello" ;则数组carray所占的空间为()(A)6个字节(B)5个字节(C)4个字节(D)7个字节(6)给出如下定义:char cx [] = "abcdefg" ;
char cy [] = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' } ; 则正确的叙述为()
(A)数组cx和数组cy等价(B)数组cx和数组cy的长度相同
(C)数组cx的长度大于数组cy的长度(D)数组cx的长度小于数组cy的长度(7)判断字符串ca和字符串cb是否相等,应当使用()
(A)if ( ca == cb ) (B)if ( ca = cb )
(C)if ( strcpy ( ca , cb ) ) (D)if ( strcmp ( ca , cb ) == 0 )
(8)下面说法错误的是()
(A)在两个字符串的比较中,字符个数多的字符串比字符个数少的字符串大
(B)字符'\0'是字符串的结束标识,其ASCII代码为0
(C)当需要接收用户从键盘输入的含有空格的字符串时,应使用gets ( )函数
(D)调用strlen ( "abc\0ef\0g" )的返回值为3。

2.程序填空题
(1)下面的程序完成求10名学生的数学成绩的平均分数,完成程序:
_________①___________
void main ( )
{
______②______ ;
int isum , iaver ;
for (ictr = 0 ; ictr < 10 ; ictr ++ )
scanf ( "%d" , & ia [ictr] ) ;
___________③______________ ;
for ( _________④_____________ )
isum += ia[ictr] ;
____________⑤______________ ;
printf ( "aver is %d\n" , iaver ) ;
}
(2)下面的程序以每行4个数据的形式输出ia数组,请填空。

# define N 20
# include <stdio.h>
void main ( )
{
int ia [N] , ictr ;
for ( ictr = 0 ; ictr < N ; ictr ++ )
scanf ( "%d" , _________①____________ ) ;
for ( ictr = 0 ; ictr < N ; ictr ++ )
{
if ( ________②_________ )
_________③_________ ;
printf ( "%3d" , ia [ictr] ) ;
}
}
(3)下列程序实现查找浮点型数fn是否在数组fa中,找到输出“YES”,否则输出“NOT FOUND”,请填空。

# include <stdio.h>
________①_________
void main ( )
{
float fa [10] = { 5.0 , 12.5 , 81.3 , 24.6 , 91.7 , 68.2 , 65.1 , 54.2 , 36.2 , 10.5 } , fn ;
int ictr ;
printf ( "Please input fn :" ) ;
_________②___________ ; /*输入fn的值*/
for (ictr = 0 ; ictr < 10 ; ictr ++ )
{
if ( _________③____________ )
{
printf ( "YES" ) ;
break ;
}
}
if ( __________④______________ )
printf ( "NOT FOUND" ) ;
}
(4)下列程序完成将输入的一个数字字符串转变为整型数值的功能。

请填空。

# include <stdio.h>
# include <string.h>
void main ( )
{
char cstr [8] ;
int ictr ;
long ls ;
puts ( "Please input a digital string:" ) ;
_____________①_________________ ; /*输入一个字符串*/
ls = 0 ;
for ( ictr = 0 ; cstr[ictr] != '\0' ; ictr ++ )
ls = __________②_______________ ;
printf ( "%ld" , ls ) ;
}
(5)下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值),否则输出-1。

# include <stdio.h>
________①__________
void main ( )
{
char ch = 'a' , cstr [50] ;
int inum , ictr , iflag = 1 ;
gets ( cstr ) ;
inum = ________②___________ ;
for ( ictr = 0 ; ictr < inum ; ictr ++)
if ( __________③_______________ )
{
iflag = 0 ;
break ;
}
if ( iflag ==1 )
printf ( "%d" , -1 ) ;
else
________④_________;
}
3.编程题
(1)某班级有30名学生进行了英语考试,求他们英语成绩的平均分、最高分和最低分(从键盘上输入考试成绩)。

(2)现有一个有序正整数数组(从小到大排序),从键盘上输入一个正整数,然后将其插入到数组中,要求插入后数组仍然有序。

(3)按以下形式输出杨辉三角形(要求输出10行)。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
………………
(4)输入一个字符串,统计其中的大写字母、小写字母、空格、数字和其他字符的个数。

(5)编写程序,求出字符串的长度(不允许使用strlen函数)。

(6)输入三个字符串,找出其中最大者。

相关文档
最新文档