队列
假设以数组A[60]存放循环队列的元素,其头指针是front=47,当前队列有50个元素,则队列的尾指针值为()
队列中元素的个数: (rear-front+QueueSize)%QueueSize
根据题意得:(rear - 47 + 60)% 60 = 50
=> rear = 37
栈
在一个栈的输入序列为12345 下面哪个不可能是栈的输出序列? 23415 54132 23145 15432
第二个。54132不可能。
23415------>1进栈,2进栈,2出栈,3进栈,3出栈,4进栈,4出栈,1出栈,5进栈,5出栈
23145------>1进栈,2进栈,2出栈,3进栈,3出栈,1出栈,4进栈,4出栈,5进栈,5出栈
15432------>1进栈,1出栈,2进栈,2进栈,4进栈,5进栈,5出栈,4出栈,3出栈,2出栈
栈和队列,ABCDEF分别入栈,且出栈后及入队列。出队的顺序是BDCFEA,问栈的容量至少为?
栈是先进后出,队列是先进先出。从出队的顺序可以得到入栈和出栈的顺序:A入栈-B入栈-B出栈-C入栈-D入栈-D出栈-C出栈-E入栈-F入栈-F出栈-E出栈-A出栈。从中可以看出栈中元素最多的时候有3个,所以栈的容量至少要为3。
设栈的存储空间为 S(1:50) ,初始状态为 top=51 。现经过一系列正常的入栈与退栈操作后, top=50 ,则栈中的元素个数为( )
栈的顺序存储空间为S(1: 50),初始状态top=51,所以这个栈是50在栈底,1是开口向上的。经过一系列入栈、出栈之后,Top=50。那么此时栈中元素=51-50=1,因此这题选择A。
二叉树
已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是
推导如下:
1、从后序可知树根为C,因为最后的节点是树根。
2、从中序的规则可知树根在中间,树根的左边是左孩子,右边是右孩子。很明显树根C是没有右孩子,只有左孩子DEBA。
中序遍历:DEBA
后序遍历:DABE
推出E是左子树的根结点,并且存在左子树D,右子树BA,因为从中序遍历可知E的左边是D,右边是BA
中序遍历:BA
后序遍历:AB
推出B是右子树的根结点,并且存在右子树,但没有左子树,因为从中序遍历可知B只有右子树,没有左子树。
还原二叉树如下图:
前序为:CEDBA
推导的方法只需记住下面的规则即可,然后逐步分割法,就像我上面那样推导。拿到左右子树反复套用下面的遍历规则,很快就可以还原一棵完整的树。
1.先序遍历:根、左、右
2.中序遍历:左、根、右
3.后序遍历: 左、右、根