数据结构第四、五、六、七章作业答案
数据结构单元4练习参考答案
单元测验4一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)队列是限制在两端进行操作的线性表。
(√)(2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。
(×)(3)在链队列上做出队操作时,会改变front指针的值。
(√)(4)在循环队列中,若尾指针rear大于头指针front,其元素个数为rear- front。
(×)(5)在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。
(√)(6)链队列在一定范围内不会出现队满的情况。
(×)(7)在循环链队列中无溢出现象。
(×)(8)栈和队列都是顺序存储的线性结构。
(×)(9)在队列中允许删除的一端称为队尾。
(×)(10)顺序队和循环队关于队满和队空的判断条件是一样的。
二.填空题(1)在队列中存取数据应遵循的原则是先进先出。
(2)队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
(3)在队列中,允许插入的一端称为队尾。
(4)在队列中,允许删除的一端称为队首(或队头)。
(5)队列在进行出队操作时,首先要判断队列是否为空。
(6)顺序队列在进行入队操作时,首先要判断队列是否为满。
(7)顺序队列初始化后,front=rear= -1 。
(8)解决顺序队列“假溢出”的方法是采用循环队列。
(9)循环队列的队首指针为front,队尾指针为rear,则队空的条件为 front == rear 。
(10)链队列LQ为空时,LQ->front->next= NULL 。
(11)设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。
(12)设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1)。
(13)在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。
(14)设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为:front==(rear+1)%MAXLEN 。
最新版《数据结构》各章习题及答案
最新版《数据结构》各章习题及答案第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。
(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。
① (A)数据元素(B)计算方法(C)逻辑存储(D)数据映像② (A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。
(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5 个特性。
① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法② (A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。
()2.算法就是程序。
()3.数据元素是数据的最小单位。
()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。
()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。
()三、填空题1.数据逻辑结构包括________、________、_________ 和__________ 四种类型,其中树形结构和图形结构合称为_____ 。
2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______ 个前驱结点;最后一个结点______后续结点,其余每个结点有且只有 _______ 个后续结点。
3.在树形结构中,树根结点没有_______ 结点,其余每个结点有且只有_______个前驱结点;叶子结点没有 ________ 结点,其余每个结点的后续结点可以_________。
数据结构课后习题答案第七章
第七章图(参考答案)7.1(1)邻接矩阵中非零元素的个数的一半为无向图的边数;(2)A[i][j]= =0为顶点,I 和j无边,否则j和j有边相通;(3)任一顶点I的度是第I行非0元素的个数。
7.2(1)任一顶点间均有通路,故是强连通;(2)简单路径V4 V3 V1 V2;(3)0 1 ∞ 1∞ 0 1 ∞1 ∞ 0 ∞∞∞ 1 0邻接矩阵邻接表(2)从顶点4开始的DFS序列:V5,V3,V4,V6,V2,V1(3)从顶点4开始的BFS序列:V4,V5,V3,V6,V1,V27.4(1)①adjlisttp g; vtxptr i,j; //全程变量② void dfs(vtxptr x)//从顶点x开始深度优先遍历图g。
在遍历中若发现顶点j,则说明顶点i和j间有路径。
{ visited[x]=1; //置访问标记if (y= =j){ found=1;exit(0);}//有通路,退出else { p=g[x].firstarc;//找x的第一邻接点while (p!=null){ k=p->adjvex;if (!visited[k])dfs(k);p=p->nextarc;//下一邻接点}}③ void connect_DFS (adjlisttp g)//基于图的深度优先遍历策略,本算法判断一邻接表为存储结构的图g种,是否存在顶点i //到顶点j的路径。
设 1<=i ,j<=n,i<>j.{ visited[1..n]=0;found=0;scanf (&i,&j);dfs (i);if (found) printf (” 顶点”,i,”和顶点”,j,”有路径”);else printf (” 顶点”,i,”和顶点”,j,”无路径”);}// void connect_DFS(2)宽度优先遍历全程变量,调用函数与(1)相同,下面仅写宽度优先遍历部分。
数据结构第四五六七章作业答案
数据结构第四五六七章作业答案数据结构第四、五、六、七章作业答案第四、五章一、填空题1.不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2.设s=“a;/document/mary.doc”,则strlen(s)=20,“/”的边线为3。
3.子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4、串成的存储方式存有顺序存储、堆上分配存储和块链存储5、有一个二维数组a[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素a[0,1]的地址是100,若按行主顺序存储,则a[3,5]的地址是176和a[5,3]的地址是208。
若按列存储,则a[7,1]的地址是128,a[2,4]的地址是216。
6、设立数组a[1…60,1…70]的基地址为2048,每个元素占到2个存储单元,若以列序居多序顺序存储,则元素a[32,58]的存储地址为8950。
7、三元素组表中的每个结点对应于稠密矩阵的一个非零元素,它涵盖存有三个数据项,分别则表示该元素的行负号、列于负号和元素值。
8、二维数组a[10][20]使用列序居多方式存储,每个元素占到10个存储单元,且a[0][0]的存储地址就是2000,则a[6][12]的地址就是32609、已知二维数组a[20][10]采用行序为主方式存储,每个元素占2个存储单元,并且a[10][5]的存储地址是1000,则a[18][9]的存储地址是116810、已知二维数组a[10][20]采用行序为主方式存储,每个元素占2个存储单元,并且a[0][0]的存储地址是1024,则a[6][18]的地址是130011、两个串相等的充分必要条件是长度相等、对应位置的字符相同。
12、二维数组a[10][20]使用列序居多方式存储,每个元素占到一个存储单元,并且a[0][0]的存储地址就是200,则a[6][12]的地址就是200+(12*10+6)=326。
数据结构第七章参考答案
习题71.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。
答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。
答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。
答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。
若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。
答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。
答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。
答案:62(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。
答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。
答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。
数据结构作业答案第章图作业答案
第7章 图 自测卷解答 姓名 班级一、单选题(每题1分,共16分) 前两大题全部来自于全国自考参考书!( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。
A .1/2 B. 1 C. 2 D. 4 (B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 倍。
A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有 条边。
A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有 条边。
A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有 条边。
A .14 B. 28 C. 56 D. 112 (B )6. 用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。
A .栈 B. 队列C. 树D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。
A .栈 B. 队列C. 树D. 图 ( )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 3 4 2 5 6 ( )10. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A . 0 2 4 3 6 5 1 B. 0 1 3 6 4 2 5 C. 0 4 2 3 1 5 6 D. 0 1 3 4 2 5 6 (建议:0 1 2 3 4 5 6) ( C )11. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A . 0 2 4 3 1 6 5 B. 0 1 3 5 6 4 2 C. 0 1 2 3 4 6 5 D. 0 1 2 3 4 5 6A .0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 4 2 3 1 6 5D. 0 3 6 1 5 4 2建议:先画出图,再深度遍历⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0100011101100001011010110011001000110010011011110( A )12. 已知图的邻接表如下所示,根据算法,则从顶点0出发不是深度优先遍历的结点序列是A.0 1 3 2 B. 0 2 3 1C. 0 3 2 1D. 0 1 2 3(A)14. 深度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(D)15. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)16. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。
《数据结构》各章课后作业答案
《数据结构》各章课后作业答案 第一章 绪论课后作业答案1. 简述线性结构与非线性结构的不同点。
答:线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是多对多的。
2.分析下面各程序段的时间复杂度(每小题5分,共20分)解:1.第一个for 循环执行n+1次,第二个for 循环执行n(m+1)次,A[i][j]=0;语句执行n*m 次,此程序段总的执行次数为n+1+n*(m+1)+n*m=2nm+2n+1次。
故时间复杂度为O(n*m)。
2.算法的时间复杂度是由嵌套最深层语句的执行次数决定的,本程序段嵌套最深层语句为:s+=B[i][j];它的执行次数为n 2,所以本程序段的时间复杂度是O(n 2)。
3. 该算法的基本操作是语句x++, 其语句频度为:1111n n i i j --==∑∑=10()n i n i -=-∑=(1)2n n - 所以本程序段的时间复杂度是O(n 2)。
4.设语句执行m 次,则有3m≤n ⇒m ≤log 3n所以本程序段的时间复杂度为O(log 3n)。
第二章 线性表课后作业答案1. 填空题。
(1)在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
(2)线性表中结点的集合是 有限 的,结点间的关系是 一对一的。
(2)s=0;for (i=0; i<n; i++)for(j=0; j<n; j++) s+=B[i][j]; sum=s; 答:O (n 2)(1) for (i=0; i<n; i++) for (j=0; j<m; j++) A[i][j]=0;(3) x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(4)i=1;while(i<=n)i=i*3;(3)向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动 n-i+1 个元素。
《数据结构》第四章习题参考答案
《数据结构》第四章习题一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、KMP算法的特点是在模式匹配时指示主串的指针不会变小。
( √)2、串是一种数据对象和操作都特殊的线性表。
( √)3、只包含空白字符的串称为空串(空白串)。
( ×)4、稀疏矩阵压缩存储后,必会(不会)失去随机存取功能。
( ×)5、使用三元组表示稀疏矩阵的非零元素能节省存储空间。
( √)6、插入与删除操作是数据结构中最基本的两种操作,因此这两种操作在数组中也经常使用。
(×)7、若采用三元组表存储稀疏矩阵,只要把每个元素的行下标和列下标互换(错的),就完成了对该矩阵的转置运算。
(×)二、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?( B )A.串是字符的有限序列B.空串是由空格构成的串(空串是长度为零的串)C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2.有串S1=’ABCDEFG’,S2 = ’PQRST’,假设函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回中s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是( D )。
A.BCDEF B.BCDEFG C.BCPQRST D.CDEFGFG3、串的长度是指( B )A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数三、填空题1、串是一种特殊的线性表,其特殊性表现在_数据元素为字符,操作集也不同__;串的两种最基本的存储方式是_顺序存储_、__ 链式存储_;两个串相等的充分必要条件是__两串的长度相等且两串中对应位置的字符也相等__。
2、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为_O(m+n)__。
数据结构第三版第七章作业参考答案
//栈指针置初值
do { while (t)
//将 t 的所有左结点进栈
{ top++;
St[top]=t;
t=t->lchild;
} p=NULL; flag=1; while (top!=-1 && flag)
//p 指e当前结点的前一个已fg
的
结
点
//h置 t 的fgij为已fg过
{ t=St[top]; if (t->rchild==p) { if (t==s)
7.1 设二叉树 bt 的一种存储结构如下:
1 2 3 4 5 6 7 8 9 10 lchild 0 0 2 3 7 5 8 0 10 1 data j h f d b a c e g i rchild 0 0 0 9 4 0 0 0 0 0
其中,bt 为树根结点指针,lchild、rchild 分别为结点的左、右孩子指针域,
Ctree(t->lchild,A,2*i);
//递归构造*t 的左子树
Ctree(t->rchild,A,2*i+1); //递归构造*t 的右子树
}
}
7.5 设计一个算法,将一棵以二叉链方式存储的二叉树 t 按顺序方式存储到数组 A 中。
解:由二叉树的顺序存储方式可知本题的递归模型f()如下:
f(t,A,i):A[i]=' ';
//顺序队首尾指针 //cm=1 表示二叉树为完全二叉树 //bj=1 表示到目前为止所有结点均有左右孩子
if (b!=NULL)
{ rear++;
Qu[rear]=b;
while (first!=rear) { first++;
(完整版) 《数据结构》教材课后习题+答案
第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。
A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。
A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。
A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。
(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
数据结构-C语言-第四章作业
数据结构
练习
数据结构
设有一个二维数组A[m][n]按行优先顺序存储,假设A[0][0] 存放位置在644(10),A[2][2]存放位置在676(10),每个元素 占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示 用10进制表示。
答:设数组元素A[i][j]存放在起始地址为Loc ( i, j ) 的存储单 元中
Байду номын сангаас
练习
数据结构
设有二维数组A[10,20],其每个元素占两个字节, A[0][0]存储地址为100,若按行优先顺序存储,则 元素A[6,6]的存储地址为 352 ,按列优先顺序存储 ,元素A[6,6]的存储地址为 232 。
答:(6*20+6)*2+100=352 (6*10+6)*2+100=232
练习
数据结构
1、 设有二维数组a[6][8],每个元素占相邻的4个字节,存储 器按字节编址,已知a的起始地址是1000,试计算:
数组a的最后一个元素a[5][7]起始地址; 按行序优先时,元素a[4][6]起始地址; 按列序优先时,元素a[4][6]起始地址。
课本作业
4.5 4.8 4.10
∵ Loc ( 2, 2 ) = Loc ( 0, 0 ) + 2 * n + 2 = 644 + 2 * n + 2 = 676.
∴ n = ( 676 - 2 - 644 ) / 2 = 15
∴ Loc ( 3, 3 ) = Loc ( 0, 0 ) + 3 * 15 + 3 = 644 + 45 + 3 = 692.
数据结构作业及答案
第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。
1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像2 A.结构 B.关系 C.运算 D.算法2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。
1 A.算法 B.数据元素 C.数据操作 D.逻辑结构2 A.操作 B.映像 C.存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。
A.随机存取 B.顺序存取 C.索引存取 D.散列存取5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。
1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系C.可读性和文档性D.数据复杂性和程序复杂性k6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。
1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。
A.正确 B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。
A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是。
A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。
数据结构第六章作业及答案
3、试分别画出具有3个结点的树和3个结点的二叉树 的所有不同形态。 4、对右图所示的二叉树求出 A 以下的遍历序列: B C (1)先序序列 D E F (2)中序序列 (3)后序序列 G H 5、假设一棵二叉树的先序序列为 EBADCFHGIKJ 和 中序序列为 ABCDEFGHIJK。请画出该树,并给 出后序序列。 6、假设一棵二叉树的中序序列为 DCBGEAHFIJK和 后序序列为 DCEGBFHKJIA 。请画出该树,并给 出先序序列。
2
7、将以下森林转换成二叉树。
A
B
C
D
E F G J I
H
L K
3
8、画出和下列二叉树相应的森林。
(a)
A
(b) (c)
A B C
(d)
A B C B C D B
(e)
A
C E F
A
G
J
H
K M
I
4
第六章作业解答 1、(1) M、N、D、L、F、J、K是叶子结点
(2) C是结点G的双亲 (3) A、C是结点G的祖先 (4) I、M、N是结点E的子孙 (5) 树的深度是5 2、(1)二叉树与树的区别: 二叉树的一个结点至多有2个子树,树则不然; 二叉树的一个结点有左、右之分,而树则没有此要求 (2)一棵度为2的树有2个分支,没有左、右之分, 一棵二叉树也可以有2个分支,但有左、右之分, 且左、右不能交换。 3、具有3个结点的树的形态为:
C D
E
F
K
7
7、解:转换后的二叉树为:
A B C D E F G J K I L H
8
8、解:转换后的森林为: (a) (b) (c)
A A B A B C
数据结构4-7习题答案
队列回顾
第六章队列知识要点:
1、队列类型的定义:(a1,a2,„,an),只在队首进 行删除操作,在队尾进行插入操作,先进先出。 2、队列的存储形式:
链式存储: 顺序存储:循环队列
6.1 循环队列的优点是什么?如何判别它的空和满?
由于队列的顺序存储结构中从队尾入队、从队首出队,可能 会造成存储空间实际未满,但又数据元素无法入队的情况,即 虚溢出现象,而循环队列将整个队列看成一个环,则可以解决 虚溢出问题。 对于循环队列Q,其存储空间大小为MAXQSIZE,则: 队空条件:Q.front==Q.rear 队满条件:(Q.rear+1)%MAXQSIZE==Q.front 6.2 设长度为n的链队列用循环单链表表示,若只设头指针,则 入列操作、出列操作实现的时间开销是多少?若只设尾指针呢?
5.11写一算法识别依次读入的一个以‘#’为结束符的字 符序列是否是形如“序列1@序列2”的字符序列。其中 ,序列1和序列2中都不含有字符‘@’,且序列2是序 列1的逆序列。例如“aab*c^da@ad^c*baa”是满足条 件的字符序列。
int IsReverse() //判断输入的字符串中'@'前和'@'后部 分是否为逆串,是则返回1,否则返回0 {InitStack(s); char e; cin>>e; while(e!='@' and e!=’#’) { push(s,e); cin>>e;} if (e==’#’) return 0; while(e!='#') { cin>>e; if(StackEmpty(s)) return 0; pop(s,c); if(e!=c) return 0; } if(!StackEmpty(s)) return 0; return 1; }//IsReverse
数据结构课后习题答案-完整版
数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。
答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。
如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。
2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。
答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。
遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。
---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。
答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。
如果存在环,则两个指针必定会相遇。
2. 题目:给定一个链表,删除链表的倒数第N个节点。
答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。
此时第二个指针指向的节点即为要删除的节点。
---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。
答案:使用辅助栈来保存当前栈中的最小元素。
每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。
2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。
答案:使用双端队列来保存当前队列中的最大值。
每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。
---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。
答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。
如果任意节点的差值大于1,则该二叉树不是平衡二叉树。
数据结构课后习题答案第四章
第四章串一、单项选择题1.B2. B3.B4.C5. C二、填空题1.空、字符2.由空格字符(ASCII值32)所组成的字符串空格个数3.长度、相等、子、主4.55.011223126.(1)char s[ ] (2) j++ (3) i >= j7.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。
串s用i指针(1<=i<=s.len)。
t串用j指针(1<=j<=t.len)。
算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。
程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。
若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。
(1) i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] //所有注释同上(a)(2) con=0 (3) j+=k (4) j++ (5) i++三、应用题1.空格是一个字符,其ASCII码值是32。
空格串是由空格组成的串,其长度等于空格的个数。
空串是不含任何字符的串,即空串的长度是零。
2.(a)A+B “ mule”(b)B+A “mule ”(c)D+C+B “myoldmule”(d)SUBSTR(B,3,2) “le”(e)SUBSTR(C,1,0) “”(f)LENGTH(A) 2(g)LENGTH(D) 2(h)INDEX(B,D) 0(i)INDEX(C,”d”) 3(j)INSERT(D,2,C) “myold”(k)INSERT(B,1,A) “m ule”(l)DELETE(B,2,2) “me”(m)DELETE(B,2,0) “mule”3.朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)
第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。
但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。
所以链式存储结构通常借助于程序设计语言的指针类型来描述。
5. 选择题(1)~(6):CCBDDA\6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)(第2章1.选择题(1)~(5):BABAD (6)~(10): BCABD (11)~(15):CDDAC\2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。
要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。
表中不允许有重复的数据。
[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。
如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。
当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){法设计题(1)将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。
当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。
两个栈均从两端向中间增长。
试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。
数据结构第七章课后习题答案
7_1对于图题7.1(P235)的无向图,给出:(1)表示该图的邻接矩阵。
(2)表示该图的邻接表。
(3)图中每个顶点的度。
解:(1)邻接矩阵:0111000100110010010101110111010100100110010001110(2)邻接表:1:2----3----4----NULL;2: 1----4----5----NULL;3: 1----4----6----NULL;4: 1----2----3----5----6----7----NULL;5: 2----4----7----NULL;6: 3----4----7----NULL;7: 4----5----6----NULL;(3)图中每个顶点的度分别为:3,3,3,6,3,3,3。
7_2对于图题7.1的无向图,给出:(1)从顶点1出发,按深度优先搜索法遍历图时所得到的顶点序(2)从顶点1出发,按广度优先法搜索法遍历图时所得到的顶点序列。
(1)DFS法:存储结构:本题采用邻接表作为图的存储结构,邻接表中的各个链表的结点形式由类型L_NODE规定,而各个链表的头指针存放在数组head中。
数组e中的元素e[0],e[1],…..,e[m-1]给出图中的m条边,e中结点形式由类型E_NODE规定。
visit[i]数组用来表示顶点i是否被访问过。
遍历前置visit各元素为0,若顶点i被访问过,则置visit[i]为1.算法分析:首先访问出发顶点v.接着,选择一个与v相邻接且未被访问过的的顶点w访问之,再从w 开始进行深度优先搜索。
每当到达一个其所有相邻接的顶点都被访问过的顶点,就从最后访问的顶点开始,依次退回到尚有邻接顶点未曾访问过的顶点u,并从u开始进行深度优先搜索。
这个过程进行到所有顶点都被访问过,或从任何一个已访问过的顶点出发,再也无法到达未曾访问过的顶点,则搜索过程就结束。
另一方面,先建立一个相应的具有n个顶点,m条边的无向图的邻接表。
数据结构课后题答案(第4章).
数据结构部分课后习题答案第四章4.1广度优先生成树(黑体加粗边:深度拓扑排序序列:v0-v2-v3-v1-v4 4.2广度深度(1(2加边顺序a-b b-e e-d d-f f-c4.3、如图所示为一个有6个顶点{u1,u2,u3,u4,u5,u6}的带权有向图的邻接矩阵。
根据此邻接矩阵画出相应的带权有向图,利用dijkstra 算法求第一个顶点u1到其余各顶点的最短路径,并给出计算过程。
带权有向图:4.4证明在图中边权为负时Dijkstra算法不能正确运行若允许边上带有负权值,有可能出现当与S(已求得最短路径的顶点集,归入S内的结点的最短路径不再变更内某点(记为a以负边相连的点(记为b确定其最短路径时,它的最短路径长度加上这条负边的权值结果小于a原先确定的最短路径长度,而此时a在Dijkstra算法下是无法更新的。
4.5P.198 图中的权值有负值不会影响prim和kruskal的正确性如图:KRUSKAL求解过程:4.6 Dijkstra算法如何应用到无向图?答:Dijkstra算法通常是运用在带非负权值的有向图中,但是无向图其实就是两点之间两条有向边权值相同的特殊的有向图,这样就能将Dijkstra算法运用到无向图中。
4.7用FLOYD算法求出任意两顶点的最短路径(如图A(6所示。
A(0= A(1= A(2=A(3= A(4=A(5= A(6= V1 到 V2、V3、V4、V5、V6 往返路径长度分别为 5,9,5,9,9,最长为 9,总的往返路程为 37 同理 V2 到 V1、V3、V4、V5、V6 分别为 5,8,4,4,13,最长为 13,总和 34 V3 对应分别为 9,8,12,8,9,最长为 12,总和为 46 V4 对应分别为 5,4,12,4,9,最长为 12,总和为 34 V5 对应分别为9,4,8,4,9,最长为 9,总和为 34 V6 对应分别为 9,13,9,9,9,最长为13,总和为 49 题目要求娱乐中心“距其它各结点的最长往返路程最短” ,结点V1, V5 最长往返路径最短都是 9。
数据结构作业解答
第一章作业一、选择题1. 算法的计算量的大小称为计算的( B )。
A.效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于( C)A.问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(C),它必须具备(B)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性4.一个算法应该是( B )。
A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C.5. 下面关于算法说法错误的是( D )A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是( A )(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为( C )两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构8.在下面的程序段中,对x的赋值语句的频度为( c )FOR i:=1 TO n DOFOR j:=1 TO n DOx:=x+1;A. O(2n) B.O(n) C.O(n2) D.O(log2n)9.程序段 FOR i:=n-1 DOWNTO 1 DOFOR j:=1 TO i DOif A[j]>A[j+1]A[j]与A[j+1]对换;其中 n为正整数,则最后一行的语句频度在最坏情况下是(D )A. O(n)B. O(nlogn)C. O(n3)D. O(n2)二、判断题1. 数据元素是数据的最小单位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四、五章一、填空题1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的位置为 3 。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4、串的存储方式有顺序存储、堆分配存储和块链存储5、有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的地址是100,若按行主顺序存储,则A[3,5]的地址是176 和 A[5,3]的地址是208 。
若按列存储,则A[7,1] 的地址是128 ,A[2,4]的地址是216 。
6、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。
7、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
8、二维数组A[10][20]采用列序为主方式存储,每个元素占10个存储单元,且A[0][0]的存储地址是2000,则A[6][12]的地址是32609、已知二维数组A[20][10]采用行序为主方式存储,每个元素占2个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的存储地址是 116810、已知二维数组A[10][20]采用行序为主方式存储,每个元素占2个存储单元,并且A[0][0]的存储地址是1024, 则A[6][18]的地址是130011、两个串相等的充分必要条件是长度相等、对应位置的字符相同。
12、二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是 200+(12*10+6)= 326 。
二、单选题1、串是一种特殊的线性表,其特殊性体现在( B )A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符2、设有两个串p和q,求q在p中首次出现的位置的运算称作( B )A.连接B.模式匹配C.求子串D.求串长3.设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x 和y 串的连接串,subs(s, i, j)返回串s 的从序号i 开始的j 个字符组成的子串,len(s)返回串s 的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是( D )A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF4.假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为( A )。
(无第0行第0列元素)A.16902 B.16904 C.14454 D.答案A, B, C 均不对5、下面关于串的的叙述中,( B )是不正确的。
A 、串是字符的有限序列B 、空串是由空格构成的串C 、模式匹配是串的一种重要运算D 、串既可以采用顺序存储,也可以采链式存储6. 设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是( B )A 、i(i-1)/2+j-1B 、i(i-1)/2+jC 、i(i+1)/2+j-1D 、i(i+1)/2+j7. 有一个二维数组A ,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。
那么,这个数组的体积是 A 个字节。
假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A 的最后一个元素的第一个字节的地址是 B 。
若按行存储,则A[2,4]的第一个字节的地址是 C 。
若按列存储,则A[5,7]的第一个字节的地址是 D 。
供选择的答案:A ~D :①12 ② 66 ③ 72 ④ 96 ⑤ 114 ⑥ 120 ⑦ 156 ⑧ 234 ⑨ 276 ⑩ 282 (11)283 (12)288 答案:ABCD=12, 10, 3, 98、以下关于广义表的叙述中,正确的是( A )A) 广义表是由0个或多个单元素或子表构成的有限序列B) 广义表至少有一个元素是子表C) 广义表不能递归定义 D) 广义表不能为空表 ⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=n n n n a a a a a a A ,2,1,2,21,21,19、设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序(1≤i,j≤n,且i≤j)存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij在B中的位置为( B )。
A. i(i-l)/2+jB. j(j-l)/2+iC.j(j-l)/2+i-1 D. i(i-l)/2+j-110. 设A[n,n]是对称矩阵,将其下三角(包括对角线)以行序存储到一维数组T[n(n+1)/2]中,则:任意一个上三角元素a[i][j]所对应T[k]的下标k是( B )。
A. i(i-1)/2+jB. j(j-1)/2+iC. i(j-i)/2+1D. j(i-1)/2+111、常对数组进行的两种基本操作是(C)。
A.建立与删除B.索引和修改C.查找和修改D.查找与索引12、就一般情况而言,当( C )时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。
A.行与列的上界相同 B. 行与列的下界相同C. 行与列的上、下界都相同D. 行的元素个数与列的元素个数相同13、二维数组M的成员是6个字符(每个字符占一个存储单元,即一个字节)组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M至少需要(D①)个字节;M的第8列和第5行共占(②B)个字节。
①A.90 B.180 C.240 D.540②A.108 B.114 C.54 D.6014、数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是(C)。
A.80 B.100 C.240 D.27015、数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为(C)A.SA+141 B.SA+144 C.SA+222 D.SA+22516、设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为(C)A.O(n) B.O(logn) C.O(1) D.O(n2)217、三、判断题1、(√)子串是主串中任意个连续字符组成的序列。
2、(√)广义表((( a ), b), c ) 的表头是(( a ), b),表尾是( c )。
3、(×)数组元素的下标值越大,存取时间越长4、数组是线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。
(×)⒋(×)设有两个串p和q,求q在p中首次出现的位置的运算称作求子串。
⒌(√)二维数组是其数据元素为线性表的线性表。
6、( ╳)若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置。
7、(╳ )若一个广义表的表头为空表,则此广义表亦为空表。
8、 (╳ )用一维数组存储二叉树时,总是以前序遍历存储节点。
9、采用堆分配存储串时,串仍以一组地址连续的存储单元存储,但存储空间是在程序执行过程中由动态分配而得到。
(√)四、问答题=0),按照压缩存储的思想,可1、已知n阶下三角矩阵A(即当i<j时,有aij以将其主对角线以下所有元素(包括主对角线上元素 )依次存放于一维数组B 中,请写出从第一列开始采用列序为主序分配方式时在B中确定元素a的存放ij位置的公式。
答:n阶下三角矩阵元素A[i][j](1<=i,j<=n,i>=j)。
第1列有n个元素,第j列有n-j+1个元素,第1列到第j-1列是等腰梯形,元素数为(n+(n-j+2)(j-1)/2,而a在第j列上的位置是为i-j+1。
所以n阶下三角矩阵ij在一维数组B中的存储位置k与i和j的关系为:A按列存储,其元素aijk=(n+(n-(j-1)+1)(j-1)/2+(i-j+1)=(2n-j)(j-1)/2+i五、算法设计1、输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[1],……。
编程统计其共有多少个整数,并输出这些数。
参考答案int CountInt()// 从键盘输入字符串,连续的数字字符算作一个整数,统计其中整数的个数。
{int i=0,a[]; // 整数存储到数组a,i记整数个数scanf(“%c”,&ch);// 从左到右读入字符串while(ch!=‘#’) //‘#’是字符串结束标记if(isdigit(ch))// 是数字字符{num=0; // 数初始化while(isdigit(ch)&& ch!=‘#’)// 拼数{num=num*10+‘ch’-‘0’;scanf(“%c”,&ch);}a[i]=num;i++;if(ch!=‘#’)scanf(“%c”,&ch);// 若拼数中输入了‘#’,则不再输入}// 结束while(ch!=‘#’)printf(“共有%d个整数,它们是:”i);for(j=0;j<i;j++){printf(“%6d”,a[j]);if((j+1)%10==0)printf(“\n”);}// 每10个数输出在一行上}// 算法结束2、S=“S1S2…Sn”是一个长为N的字符串,存放在一个数组中,编程序将S改造之后输出:(1)将S的所有第偶数个字符按照其原来的下标从大到小的次序放在S的后半部分;(2)将S的所有第奇数个字符按照其原来的下标从小到大的次序放在S的前半部分;例如:S=‘ABCDEFGHIJKL’则改造后的S为‘ACEGIKLJHFDB’。
void RearrangeString()//对字符串改造,将第偶数个字符放在串的后半部分,第奇数个字符前半部分。
{char ch,s[],stk[]; //s和stk是字符数组(表示字符串)和字符栈int i=1,j; //i和j字符串和字符栈指针while((ch=getchar())!=’#’)// ’#’是字符串结束标志s[i++]=ch; //读入字符串s[i]=’\0’; //字符数组中字符串结束标志i=1;j=1;while(s[i]) //改造字符串{if(i%2==0) stk[i/2]=s[i]; else s[j++]=s[i];i++; }//whilei--; i=i/2; //i 先从’\0’后退,是第偶数字符的个数while(i>0) s[j++]=stk[i--] //将第偶数个字符逆序填入原字符数组}3、请编写完整的程序。