数据结构第五章习题课课案
数据结构第五章参考答案

习题51.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)3个结点可构成(___________)棵不同形态的二叉树。
答案:5(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n>1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n-1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)(7)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n-1(8)设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT (X)的编号为()。
答案:24(10)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(11)(12)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________)。
答案:68(13)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(14)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________)。
答案:ABCDEF(15)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
吉林省专升本数据结构习题及答案——第五章

吉林省专升本考试数据结构分章习题及参考答案———选择题(第五章)1、一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )。
A、250B、500C、254D、5012、将一棵树t转换为孩子—兄弟链表表示的二叉树h,则t的后根序遍历是h 的A、前序遍历B、中序遍历C、后序遍历D、层序遍历3、采用邻接表存储的图,其深度优先遍历类似于二叉树的()。
A、中序遍历B、先序遍历C、后序遍历D、按层次遍历4、二叉树的第5层上最多含有结点数为()A、31B、16C、15D、325、某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则前序序列是:A、E,G,F,A,C,D,BB、E,A,C,B,D,G,FC、E,A,G,C,F,B,DD、上面的都不对6、若森林F有15条边、25个结点,则F包含树的个数是( )。
A、8B、9C、10D、117、有权值分别为2,3,5,8,7,4的叶子结点生成一棵哈夫曼树,其带权路径长度为()A、36B、72C、96D、1208、任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序()A、肯定不发生改变B、肯定发生改变C、不能确定D、有时发生变化9、为5个使用频率不等的字符设计哈夫曼编码,不可能的方案是( ).A、 111,110,10,01,00B、000,001,010,011,1C、100,11,10,1,0D、001,000,01,11,1010、给定二叉树1(2(4,5(6,7)),3)。
设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。
若遍历后的结点序列为3,1,7,5,6,2,4则其遍历方式是( )A、LRNB、NRLC、RLND、RNL11、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为()。
A、67B、68C、69D、7012、深度为k的完全二又树至少有( )个结点。
A、2k-2+1B、2k-1C、2k-1D、2k-1-113、一个具有1025个结点的二叉树的高h为()A、11B、10C、11至1025之间D、10至1024之间14、设F是一个森林,B是由F变换得的二叉树。
数据结构课后习题答案

大学课程《数据结构》课后习题答案第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
07《数据结构》第五章

3
本章课程内容(第五章 数组和广义表)
5.1 数组的类型定义 5.2 数组的顺序表示和实现
5.3 矩阵的压缩存储
矩阵的压缩存储
若i≥j,则aij在下三角形中。 aij之前的i行(从第0行到第i-1行) 一共有1+2+…+i=i(i+1)/2个元素,在第i行上, aij之前恰有j个元 素(即ai0,ai1,ai2,…,aij-1),因此有:
k=i×(i+1)/2+j
0≦k<n(n+1)/2
若i<j,则aij是在上三角矩阵中。因为aij=aji,所以只要交换上述 对应关系式中的i和j即可得到:
数组的类型定义
基本操作: InitArray (&A, n, bound1, ..., boundn) 操作结果:若维数 n 和各维长度合法,则构造相应的数组 A。 DestroyArray (&A) 初始条件:数组 A 已经存在。
操作结果:销毁数组 A。
Value (A, &e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值。 操作结果:若各下标不超界,则e赋值为所指定的A的元素值,并返 回OK。 Assign (&A, e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值。
………………..
an-1 0 a n-1 1 a n-1 2 …a n-1 n-1
数据结构课后习题第五章

习题5一、选择题1.洗漱矩阵的一半压缩方法是( )。
A.二维数组B.广义表C.三元组表D.一维数组2. 设矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡nm n n a a a ...a ..........…1111是一个对称矩阵,为了节省空间,将其下三角部分按行有先存放在一维数组B 中。
对下三角矩阵中任一元素a ij (i ≥j ),在一维数组B 中下表k 的值是( )。
A. i(i-1)/2+j-1B. i(i-1)/2+jC.i(i+1)/2+j-1D. i(i+1/2+j3. 在稀疏矩阵的三元组表示法只能怪,每个三元组表示( )。
A. 矩阵中数据元素的行号和值B. 矩阵中非零元素的值C. 矩阵中非零元素的行号和值D. 矩阵中非零元素的行号、列号和值4. 对稀疏矩阵进行压缩存储是为了( )。
A. 便于进行矩阵运算B. 便于输入和输出C. 节约存储空间D.降低运算的时间复杂度5. 假设以行序列为主序存储二维数组A=array[1..100..,1..100],设每个数据元素占2B 的存储单元,基地址为10,则LOC[5,5]=( )。
A. 808B. 818C. 1010D. 10206. 设有数组A[i ,j],数组的每个元素长度为3个字节,i 的值为1到8,j 的值为1到10,数组从内存首地址BA 开始顺序存放,当用以列为主序存放时,元素A[5,8]的存储首地址为( )。
A. BA+141B. BA+180C. BA+222D. BA+2257. 设有一个10阶的对称矩阵A ,采用压缩存储方式,以行序为主存储。
a 11为第一元素,其存储地址为1,每个元素占一个字节地址空间,则a 85的地址为( )。
A. 13B. 33C. 18D. 408.广义表是线性表的推广,他们之间的区别在于( )。
A. 能否使用子表B. 能否使用原子项C. 表的长度D. 是否能为空9. 已知广义表:L=((x ,y ,z ),a ,(u ,t ,w )),从L 中取出原子项t 的运算是( )。
《数据结构》第五章习题参考答案

《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。
( ×)2、二叉树的左右子树可任意交换。
(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。
(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。
( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
(×)8、度为2的树就是二叉树。
(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。
A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。
A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。
该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。
①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。
A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。
A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。
2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。
数据结构课后习题及解析第五章

第五章习题5.1 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。
已知A的基地址为1000,计算:数组A共占用多少字节;数组A的最后一个元素的地址;按行存储时元素A36的地址;按列存储时元素A36的地址;5.2 设有三对角矩阵An×n ,将其三条对角线上的元素逐行地存于数组B(1:3n-2)中,使得B[k]= aij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变换公式。
5.3假设稀疏矩阵A和B均以三元组表作为存储结构。
试写出矩阵相加的算法,另设三元组表C存放结果矩阵。
5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。
5.5写一个在十字链表中删除非零元素aij的算法。
5.6画出下面广义表的两种存储结构图示:((((a), b)), ((( ), d), (e, f)))5.7求下列广义表运算的结果:(1)HEAD[((a,b),(c,d))];(2)TAIL[((a,b),(c,d))];(3)TAIL[HEAD[((a,b),(c,d))]];(4)HEAD[TAIL[HEAD[((a,b),(c,d))]]];(5)TAIL[HEAD[TAIL[((a,b),(c,d))]]];实习题若矩阵Am×n 中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。
假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。
第五章答案5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。
【解答】(1)k=2(i-1)+j(2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余)5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。
数据结构第五章习题课

1、特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:后者在采用压缩存储后将会失去随机存储的功能。
因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号作为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。
2、二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M[3][5]的起始地址与M按列存储时元素()的起始地址相同。
A、M[2][4]B、M[3][4]C、M[3][5]D、M[4][4]为第3、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11的地址为()。
一元素,其存储地址为1,每个元素占一个地址空间,则a85A. 13B. 33C. 18D. 404、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线(i<j)上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij的位置k的关系为( )。
A. i*(i-1)/2+jB. j*(j-1)/2+iC. i*(i+1)/2+jD. j*(j+1)/2+i5、设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序(1≤i,j≤n,且i≤j)存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij在B中的位置为( )。
A. i(i-l)/2+jB. j(j-l)/2+iC. j(j-l)/2+i-1D. i(i-l)/2+j-16、设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。
A.(i-1)*n+jB.(i-1)*n+j-1C. i*(j-1)D. j*m+i-17、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:后者在采用压缩存储后将会失去随机存储的功能。
因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号作为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。
2、二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M[3][5]的起始地址与M按列存储时元素()的起始地址相同。
A、M[2][4]B、M[3][4]C、M[3][5]D、M[4][4]为第3、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11的地址为()。
一元素,其存储地址为1,每个元素占一个地址空间,则a85A. 13B. 33C. 18D. 404、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线(i<j)上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij的位置k的关系为( )。
A. i*(i-1)/2+jB. j*(j-1)/2+iC. i*(i+1)/2+jD. j*(j+1)/2+i5、设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序(1≤i,j≤n,且i≤j)存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij在B中的位置为( )。
A. i(i-l)/2+jB. j(j-l)/2+iC. j(j-l)/2+i-1D. i(i-l)/2+j-16、设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。
A.(i-1)*n+jB.(i-1)*n+j-1C. i*(j-1)D. j*m+i-17、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A. 60B. 66C. 18000D. 338、已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是()。
A.head(tail(tail(L)))B.tail(head(head(tail(L))))C.head(tail(head(tail(L))))D.head(tail(head(tail(tail(L)))))9、下面说法不正确的是( )。
A. 广义表的表头总是一个广义表B. 广义表的表尾总是一个广义表C. 广义表难以用顺序存储结构D. 广义表可以是一个多层次的结构10、若采用按行优先顺序存储,试写出三维数组A[3][2][3]所有元素在内存中的存储次序。
答:A[0][0][0],A[0][0][1],A[0][0][2],A[0][1][0],A[0][1][1],A[0][1][2],A[1][0][0],A[1][0][1],A[1][0][2],A[1][1][0],A[1][1][1],A[1][1][2],A[2][0][0],A[2][0][1],A[2][0][2],A[2][1][0],A[2][1][1],A[2][1][2]11、二维数组A[m][n]采用按行存储,每个元素占k个存储单元,第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的存储地址是。
答:LOC(A[0][0])+(n*i+j)*k12、三维数组a[4][5][6](下标从0开始计,a有4*5*6个元素),每个元素的长度是2,则a[2][3][4]的地址是____。
(设a[0][0][0]的地址是1000,数据以行为主方式存储)答:1164公式:LOC(aijk)=LOC(a000)+[v2*v3*(i-c1)+v3*(j-c2)+(k-c3)]*l(l为每个元素所占单元数)13、假设一个15阶的上三角矩阵A按行优先顺序压缩存储在一维数组B中,则非零元素A9,9在B中的存储位置k=_______。
(注:矩阵元素下标从1开始)答:9314、设广义表L=((),()), 则head(L)是(1)___;tail(L)是(2)____;L的长度是(3)___;深度是 (4)__。
答:(1)()(2)(())(3)2 (4)215、广义表A=(((a,b),(c,d,e))),取出A中的原子e的操作是: _______。
答:head(tail(tail(head(tail(head(A))))))16、设对称矩阵A=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡525321(1)下标:试求出A中任一元素的行列下标[i,j](1<=i,j<=4)与S中元素的下标K之间的关系.(2)若将A视为稀疏矩阵时,画出其三元组表形式压缩存储表。
答:(1)k=(2n-j+2)(j-1)/2+i-j+1 (当i≥j时,本题n=4)k=(2n-i+2)(i-1)/2+j-i+1 (当i<j时,本题n=4)(2)稀疏矩阵的三元组表为:s=((4,4,6),(1,1,1),(1,4,2),(2,2,3),(3,4,5),(4,1,2),(4,3,5))。
其中第一个三元组是稀疏矩阵行数、列数和非零元素个数。
其它三元组均为非零元素行值、列值和元素值。
17、设任意n个整数存放于数组A(1:n)中,试编写程序,将所有正数排在所有负数前面(要求算法复杂性为0( n))。
类似本题的另外叙述有:(1)已知数组A[1..n]的元素类型为整型,设计算法调整A,使其左边的所有元素小于零,右边的所有元素大于等于零。
(要求算法的时间复杂度和空间复杂度均为0(n))(2)设计一个算法,把整数数组中所有的偶数放到所有的奇数之前。
要求时间、空间效率尽可能高。
(3)设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数存放在数组的后半部分。
要求尽可能少用临时存储单元并使时间最少。
请试着分析你实现的算法的时间复杂度和空间复杂度。
(4)设计算法将数组A[1..n]调整为左右两部分,使的左边所有的元素小于右边的所有元素,并给出这一划分的分界位置。
要求算法的时间复度为O(n)。
答:[题目分析]本题属于排序问题,只是排出正负,不排出大小。
可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。
然后i和j所指数据交换,继续以上过程,直到 i=j为止。
void Arrange(int A[],int n)//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面{int i=0,j=n-1,x; //用类C编写,数组下标从0开始while(i<j){while(i<j && A[i]>0) i++;while(i<j && A[j]<0) j--;if(i<j) {x=A[i]; A[i++]=A[j]; A[j--]=x; }//交换A[i] 与A[j]}}//算法Arrange结束.[算法讨论]对数组中元素各比较一次,比较次数为n。
最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前面)发生n/2次交换。
用类c编写,数组界偶是0..n-1。
空间复杂度为O(1).类似本题的其它题的解答::(1)与上题同,因要求空间复杂度也是O(n),可另设一数组C,对A数组从左到右扫描,小于零的数在C中从左(低下标)到右(高下标)存,大于等于零的数在C中从右到左存。
(2)将19题中判定正数(A[i]>0)改为判偶数(A[i]%2==0),将判负数(A[j]<0)改为(A[j]%2!=0)。
(3)同(2),只是要求奇数排在偶数之前。
(4)利用快速排序思想,进行一趟划分。
int Partition(int A[],int n)//将n个元素的数组A调整为左右两部分,且左边所有元素小于右边所有元素,返回分界位置。
{int i=0,j=n-1,rp=A[0]; //设数组元素为整型while(i<j){while(i<j &&A[j]>=rp) j--;while(i<j &&A[i]<=rp) i++;if(i<j) { x=A[i];A[i]=A[j]; A[j]=x; }}A[i]=rp; return(i); //分界元素}// Partition18、在数组 A[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个。
答:[题目分析]本题要求建立有序的循环链表。
从头到尾扫描数组A,取出A[i](0<=i<n),然后到链表中去查找值为A[i]的结点,若查找失败,则插入。
LinkedList creat(ElemType A[],int n)//由含n个数据的数组A生成循环链表,要求链表有序并且无值重复结点{ LinkedList h;h=(LinkedList) malloc(sizeof(LNode));//申请结点h->next=h; //形成空循环链表for(i=0;i<n;i++){ pre=h;p=h->next;while(p!=h && p->data<A[i]){pre=p; p=p->next;} //查找A[i]的插入位置 if(p==h || p->data!=A[i]) //重复数据不再输入 {s=(LinkedList) malloc(sizeof(LNode));s->data=A[i]; pre->next=s; s->next=p;//将结点s链入链表中}}//forreturn(h);}// creat19、编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。
[问题分析]由于字母共26个,加上数字符号10个共36个,所以设一长36的整型数组,前10个分量存放数字字符出现的次数,余下存放字母出现的次数。
从字符串中读出数字字符时,字符的ASCII代码值减去数字字符‘0’的ASCII 代码值,得出其数值(0..9),字母的ASCII代码值减去字符‘A’的ASCII代码值加上10,存入其数组的对应下标分量中。
遇其它符号不作处理,直至输入字符串结束。
void Count()//统计输入字符串中数字字符和字母字符的个数{int i,num[36];char ch;for(i=0;i<36;i++)num[i]=0;// 初始化while((ch=getchar())!=‘#’) //‘#’表示输入字符串结束if(‘0’<=ch<=‘9’){i=ch-48;num[i]++;} // 数字字符 else if(‘A’<=ch<=‘Z’){i=ch-65+10;num[i]++;}// 字母字符for (i=0;i<10;i++) // 输出数字字符的个数printf (“数字%d 的个数=%d\n ”,i ,num[i]);for (i =10;i<36;i++)// 求出字母字符的个数printf (“字母字符%c 的个数=%d\n ”,i +55,num[i]); }//算法结束7. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。