PTA第三章栈和队列练习题教学提纲
- 格式:doc
- 大小:337.00 KB
- 文档页数:11
数据结构第三章栈和队列练习及答案⼀、选择题1、栈中存取数据的原则()A、先进先出B、先进后出C、后进后出D、随意进出2、队列中存取数据的原则()A、先进先出B、后进先出C、先进后出D、随意进出3、插⼊和删除只能在⼀端进⾏的线性表,称为()A、队列B、循环队列C、栈D、循环栈4、在栈中,出栈操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)5、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则⼊队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)6、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则出队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)7、⼀个线性表的第⼀个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()A、110B、108C、100D、1208、⼀个栈的⼊栈序列是a,b,c,d,e,则栈的不可能的输出序列是()A、edcbaB、decbaC、dceabD、abcde9、若已知⼀个栈的⼊栈序列是1,2,3,……,n,其输出序列是p1,p2,p3,……,pn,若p1=n,则pi为()A、iB、n=iC、n-i+1D、不确定10、判断⼀个栈ST(最多元素m0)为空的条件是()A、ST->top==0B、ST->top==-1C、ST->top!=m0D、ST->top==m011、判断⼀个栈ST(最多元素m0)为满的条件是()A、ST->top!=0B、ST->top==0C、ST->top!=m0D、ST->top==m012、判断⼀个循环队列QU(最多元素为m0)为空的条件是()A、QU.front==QU.rearB、QU.front!=QU.rearC、QU.front==(QU.rear+1)%m0D、QU.front!=(QU.rear+1)%m013、判断⼀个循环队列QU(最多元素为m0)为满的条件是()A、QU.front==QU.rearB、QU.front!=QU.rearC、QU.front==(QU.rear+1)%m0D、QU.front!=(QU.rear+1)%m014、循环队列⽤数组存放其元素值A[0,m-1],已知其头尾指针分别是rear和front,则当前队列的元素个数是()A、(rear-front+m)%mB、rear-front+1C、rear-front-1D、rear-front15、栈和队列的共同特点是()A、都是先进后出B、都是先进先出C、只允许在端点处插⼊和删除D、没有共同点⼆、填空题1、设长度为n的链队列⽤单循环链表表⽰,若只设头指针,则⼊队和出队操作的时间复杂度分别为(O(N))和(O(1));若⼜设尾指针,则⼊队和出队操作的时间复杂度分别为(O(1))和(O(1))。
《数据结构》第三章堆栈和队列习题基本概念题:3-1 什么叫堆栈?什么叫队列?3-2 线性表、堆栈和队列这三种抽象数据类型有什么相同之处和不同之处?3-3 在顺序队列中,什么叫真溢出?什么叫假溢出?为什么顺序队列通常都采用顺序循环队列结构?3-4 什么叫优先级队列?优先级队列和队列有什么相同之处和不同之处?3-5 举例说明堆栈、队列和优先级队列的用途。
复杂概念题:3-6 设数据元素序列{a, b, c, d, e, f, g}的进堆栈操作和出堆栈操作可任意进行(排除堆栈为空时的出堆栈操作情况),下列哪些数据元素序列可由出堆栈序列得到:(1){d, e, c, f, b, g, a}; (2){f, e, g, d, a, c, b};(3){e, f, d, g, b, c, a}; (4){c, d, b, e, f, a, g}3-7 画出借助堆栈把下列中缀表达式转换成后缀表达式的过程:A * (B - D) + E / F3-8 对于一个堆栈,(1)如果输入序列由A,B,C,D组成,试给出全部可能的输出序列和不可能的输出序列。
(2)设有n个数据元素的序列顺序进栈,试给出可能的输出序列个数。
(3)设有n个数据元素的序列顺序进栈,试给出不可能的输出序列个数。
(4)以n=4为例,用(2)和(3)中得出的公式验证(1)的结论。
算法设计题:3-9 编写一个判断算术表达式中开括号和闭括号是否配对的算法。
3-10 给出采用设置标志位的方法解决“假溢出”问题的顺序循环队列的初始化操作、入队列操作和出队列操作的算法思想。
3-11 设计采用设置标志位方法解决“假溢出”问题的顺序循环队列的初始化操作、入队列操作和出队列操作的函数。
3-12 仿照例3-3,编程序判断一个字符序列是否是回文,要求采用链式队列和链式堆栈。
3-13 编程序判断一个字符序列是否是回文,要求只使用堆栈,不使用队列。
3-14 编写一个顺序优先级队列的出队列操作算法,要求不考虑相同优先级时的先进先出原则。
第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
PTA第三章栈与队列⼀、判断题1.若⼀个栈的输⼊序列为1,2,3,……,N,输出序列的第⼀个元素为i,则第j个输出的元素是j-i-1 (×)解析:应该是不确定的,不能保证数字出栈后不会再⼊栈2.所谓“循环队列”是指⽤单向循环链表或者循环数组表⽰的队列(×)解析:循环队列指的是后者,⽤数组表⽰的队列,利⽤求余数运算使得头尾相接3.在对不带头结点的链队列做出队操作时,不会改变头指针的值(×)解析:会改变头指针的值,变成相连指针的值4.不论是⼊队列操作还是⼊栈操作,在顺序存储结构上都需要考虑“溢出”的情况(√)解析:因为存储空间是有限的5.队列和栈都是运算受限的线性表,只允许在表的两端进⾏运算(×)解析:前半句对,后半句中栈只能在⼀段进⾏操作,只有队列才是在两端进⾏操作6.栈和队列的存储⽅式,既可以是顺序⽅式,也可以是链式⽅式(√)7.循环队列也存在着空间溢出问题(√)解析:循环队列的存储空间也是有限的8.循环队列执⾏出队操作时会引起⼤量元素的移动(×)9.栈是插⼊和删除只能在⼀端进⾏的线性表;队列是插⼊在⼀端进⾏,删除在另⼀端进⾏的线性表(√)10.在n个元素连续进栈以后,他们的出栈顺序和进栈顺序⼀定正好相反(√)11.环形队列中有多少个元素可以根据队⾸指针和队尾指针的值来计算(√)12.栈和队列的插⼊和删除操作特殊,所以,栈和队列是⾮线性结构(×)13.序列{1,2,3,4,5}依次⼊栈,则不可能得到{3,4,1,2,5}的出栈序列(√)14.队列中允许插⼊的⼀端叫队头,允许删除的⼀端叫队尾(×)解析:正好相反,允许插⼊的⼀端叫队尾,允许删除的⼀端叫队头,前头后尾⼆、单选题2-1.若⽤⼤⼩为6的数组来实现循环队列,且当前front和rear的值分别为0和4。
当从队列中删除两个元素,再加⼊两个两个元素后,front和rear的值分别为多少:A.2和0B.2和2C.2和4D.2和6解析:初始化创建空队列时,令front=rear=0,每当插⼊新的队列尾元素时,rear增1,每当删除⼀个队列⾸元素时,front增1。
1-1通过对堆栈S 操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。
输出的序列为:123。
(2分)TF 作者: DS 课程组单位: 浙江大学 1-2在用数组表示的循环队列中,front 值一定小于等于rear 值。
(1分)TF 作者: DS 课程组单位: 浙江大学 1-3若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。
(2分)TF 作者: 徐镜春单位: 浙江大学 1-4If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}. (2分)TF 作者: 徐镜春单位: 浙江大学 1-5所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。
(1分)TF 作者: DS 课程组单位: 浙江大学 1-6An algorithm to check for balancing symbols in an expression uses a stack to store the symbols. (1分)T F 2-1设栈S 和队列Q 的初始状态均为空,元素a 、b 、c 、d 、e 、f 、g 依次进入栈S 。
若每个元素出栈后立即进入队列Q ,且7个元素出队的顺序是b 、d 、c 、f 、e 、a 、g ,则栈S 的容量至少是: (2分)1. 12. 23. 34. 4作者: DS课程组单位: 浙江大学2-2若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?(2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-3设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(2分)1. 3 2 1 5 42. 5 1 2 3 43. 4 5 1 3 24. 4 3 1 2 51.PPPOOOPPOPPOOO2.POPOPOPPOPPOOO3.POPPOOPPOPOOPO4.POPPOOPPOPPOOO作者: DS课程组单位: 浙江大学2-5设一个堆栈的入栈顺序是1、2、3、4、5。
第一节栈
一、栈的定义及其运算
1、栈的定义
栈(Stack):是限定在表的一端进行插入和删除运算的线性表,通常将插入、删除的一端称为栈项(top),另一端称为栈底(bottom)。
不含元素的空表称为空栈。
栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last In First Out)的线性表,简称为LIFO表。
真题选解
(例题·填空题)1、如图所示,设输入元素的顺序是(A,B,C,D),通过栈的变换,在输出端可得到各种排列。
若输出序列的第一个元素为D,则输出序列为。
隐藏答案
【答案】DCBA
【解析】根据堆栈"先进后出"的原则,若输出序列的第一个元素为D,则ABCD入栈,输出序列为DCBA
2、栈的基本运算
(1)置空栈InitStack(&S):构造一个空栈S。
第三章栈与队列习题及答案一、基础知识题3.1 设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:(1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)?(2) 能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。
(3)请分析1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。
3.2 链栈中为何不设置头结点?答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。
3.3 循环队列的优点是什么? 如何判别它的空和满?答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。
判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。
二是少用一个元素的空间。
每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。
三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。
3.4 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢?答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。
若只设尾指针,则出入队时间均为1。
因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。
3.5 指出下述程序段的功能是什么?(1) void Demo1(SeqStack *S){int i; arr[64] ; n=0 ;while ( StackEmpty(S)) arr[n++]=Pop(S);for (i=0, i< n; i++) Push(S, arr[i]);} //Demo1(2) SeqStack S1, S2, tmp;DataType x;...//假设栈tmp和S2已做过初始化while ( ! StackEmpty (&S1)){x=Pop(&S1) ;Push(&tmp,x);}while ( ! StackEmpty (&tmp) ){x=Pop( &tmp);Push( &S1,x);Push( &S2, x);}(3) void Demo2( SeqStack *S, int m){ // 设DataType 为int 型SeqStack T; int i;InitStack (&T);while (! StackEmpty( S))if(( i=Pop(S)) !=m) Push( &T,i);while (! StackEmpty( &T)){i=Pop(&T); Push(S,i);}}(4)void Demo3( CirQueue *Q){ // 设DataType 为int 型int x; SeqStack S;InitStack( &S);while (! QueueEmpty( Q )){x=DeQueue( Q); Push( &S,x);}while (! StackEmpty( &s)){ x=Pop(&S); EnQueue( Q,x );}}// Demo3(5) CirQueue Q1, Q2; // 设DataType 为int 型int x, i , m = 0;... // 设Q1已有内容,Q2已初始化过while ( ! QueueEmpty( &Q1) ){ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); m++;}for (i=0; i< n; i++){ x=DeQueue(&Q2) ;EnQueue( &Q1, x) ; EnQueue( &Q2, x);}二、算法设计题3.6 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。
1-1通过对堆栈S 操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。
输出的序列为:123。
(2分)TF 作者: DS 课程组单位: 浙江大学 1-2在用数组表示的循环队列中,front 值一定小于等于rear 值。
(1分)TF 作者: DS 课程组单位: 浙江大学 1-3若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。
(2分)TF 作者: 徐镜春单位: 浙江大学 1-4If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}. (2分)TF 作者: 徐镜春单位: 浙江大学 1-5所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。
(1分)TF 作者: DS 课程组单位: 浙江大学 1-6An algorithm to check for balancing symbols in an expression uses a stack to store the symbols. (1分)T F 2-1设栈S 和队列Q 的初始状态均为空,元素a 、b 、c 、d 、e 、f 、g 依次进入栈S 。
若每个元素出栈后立即进入队列Q ,且7个元素出队的顺序是b 、d 、c 、f 、e 、a 、g ,则栈S 的容量至少是: (2分)1. 12. 23. 34. 4作者: DS课程组单位: 浙江大学2-2若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?(2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-3设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(2分)1. 3 2 1 5 42. 5 1 2 3 43. 4 5 1 3 24. 4 3 1 2 51.PPPOOOPPOPPOOO2.POPOPOPPOPPOOO3.POPPOOPPOPOOPO4.POPPOOPPOPPOOO作者: DS课程组单位: 浙江大学2-5设一个堆栈的入栈顺序是1、2、3、4、5。
若第一个出栈的元素是4,则最后一个出栈的元素必定是:(2分)1. 12. 33. 54.1或者5作者: DS课程组单位: 浙江大学2-6为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是?(1分)1.堆栈2.队列3.树4.图作者: DS课程组单位: 浙江大学2-7某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。
若元素a、b、c、d、e依次入此队列后再进行出队操作,则不可能得到的出队序列是:(2分)1. b a c d e2. d b a c e3. e c b a d4. d b c a e1.2和02.2和23.2和44.2和6作者: DS课程组单位: 浙江大学2-10以下不是栈的基本运算的是( )。
(2分)1.删除栈顶元素2.删除栈底元素3.判断栈是否为空4.将栈置为空栈作者: 严冰单位: 浙江大学城市学院在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为()。
(2分)1.front=front->next2.s->next=rear;rear=s3.rear->next=s;rear=s;4.s->next=front;front=s;作者: 杨斌单位: 枣庄学院2-12依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是()。
(2分)1. a2. b3. c4. d作者: 杨斌单位: 枣庄学院2-13当用大小为N的数组存储顺序循环队列时,该队列的最大长度为()。
(2分)1.N2.N-13.N+14.N+2作者: 杨斌单位: 枣庄学院判断一个循环队列QU(最多元素为MaxSize)为空的条件是()。
(2分)1.QU.front == QU.rear2.QU.front != QU.rear3.QU.front == (QU.rear + 1) % MaxSize4.QU.front != (QU.rear + 1) % MaxSize作者: 严冰单位: 浙江大学城市学院2-15(neuDS)在队列中存取数据元素的原则是()。
(2分)1.先进先出2.先进后出3.后进先出4.没有限制作者: 徐婉珍单位: 浙江大学2-16循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。
(2分)1.(rear-front+m)%m2.rear-front3.rear-front-14.rear-front作者: 杨斌单位: 枣庄学院2-17若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的是()。
(2分)1.12342.41323.42314.4213作者: 杨斌单位: 枣庄学院2-18(neuDS)在链栈中,进行出栈操作时( )。
(2分)1.需要判断栈是否满2.需要判断栈是否为空3.需要判断栈元素的类型4.无需对栈作任何操作作者: 徐婉珍单位: 广东东软学院2-19(neuDS)在栈中存取数据的原则是()。
(2分)1.先进先出2.先进后出3.后进后出4.没有限制作者: 徐婉珍单位: 广东东软学院2-20链式栈与顺序栈相比,一个比较明显的优点是()。
(2分)1.插入操作更加方便2.通常不会出现栈满的情况3.不会出现栈空的情况4.删除操作更加方便作者: 严冰单位: 浙江大学城市学院2-21若(a-b)*(c+d)是中序表达式,则其后序表达式是()。
(2分)1.abcd+*-2.ab-cd+*3.ab-*cd+4.a-bcd+*1.PPPOOO2.POPOPO3.POPPOO4.PPOOPO作者: DS课程组单位: 浙江大学2-23现有队列Q 与栈S,初始时Q 中的元素依次是{ 1, 2, 3, 4, 5, 6 }(1在队头),S 为空。
若允许下列3种操作:(1)出队并输出出队元素;(2)出队并将出队元素入栈;(3)出栈并输出出栈元素,则不能得到的输出序列是:(2分)1.1, 2, 5, 6, 4, 32.2, 3, 4, 5, 6, 13.3, 4, 5, 6, 1, 24.6, 5, 4, 3, 2, 1作者: 考研真题单位: 浙江大学2-24Supposed that a, b, c, d, e and f are pushed onto a stack in the given order. Assume that pushing and popping can be done alternatively, but no consecutive three poppings are allowed. Then among the following, the impossible popping sequence is: (2分)1. b c a e f d2. c b d a e f3. d c e b f a4. a f e d c b作者: DS课程组单位: 浙江大学2-25Given an empty stack S and an empty queue Q. Push elements {1, 2, 3, 4, 5, 6, 7} one by one onto S. If each element that is popped from S is enqueued onto Q immediately, and if the dequeue sequence is {4, 5, 7, 6, 3, 2, 1}, then the minimum size of S must be: (2分)1. 22. 33. 44. 5作者: Martin Ester单位: 浙江大学2-26Given the pushing sequence of a stack as {6, 5, 4, 3, 2, 1}. Among the following, the impossible popping sequence is: (2分)1. 2 3 4 1 5 62. 3 4 6 5 2 13. 5 4 3 6 1 24. 4 5 3 1 2 6作者: DS课程组单位: 浙江大学2-27下列关于栈的叙述中,错误的是:(2分)1.采用非递归方式重写递归程序时必须使用栈2.函数调用时,系统要用栈保存必要的信息3.只要确定了入栈次序,即可确定出栈次序4.栈是一种受限的线性表,允许在其两端进行操作1.仅12.仅1、2、3精品文档精品文档3.仅 1、3、4 4. 仅 2、3、4201712190218 李文超 61.0 F(2.0) F(1.0) T(2.0) T(2.0) F(1.0) T(1.0) C(2.0) D(2.0) A(2.0) D(2.0) D(2.0) B(1.0) D(2.0) A(2.0) B(2.0) C(2.0) C(2.0) B(2.0) A(2.0) A(2.0) A(2.0) C(2.0) B(2.0) B(2.0) B(2.0) B(2.0) C(3.0)A(2.0) C D(2.0) D(2.0) B(2.0) C(2.0)。