1.循环队列是如何提出的?如何判别它的空和满?
为了解决顺序队列的假溢出问题,提出了循环队列,即把存储队列的表从逻辑上看成一个环。
判别队列空和满有三种方法:
1)采用计数器判断,空时,计数器为0,满时,计数器为maxsize;
2)另设一个布尔变量以匹配队列的空和满;
3)少用一个元素的空间,约定入队前,测试尾指针rear在循环意义下加1后是否等于头指针front,若相等则认为队满。
空:Q.front==Q.rear
满:(Q.rear+1)%maxsize==Q.front
队列元素个数:(Q.rear-Q.front+maxsize)%maxsize
3.简要说明深度优先遍历(DFS)和广度优先遍历(BFS)的不同之处。
DFS深度优先遍历(递归,栈)
类似树的先序遍历
首先访问图中某一起始顶点v,接着由v出发,访问与v邻接且未被访问的任一顶点w1,再访问与w1邻接且未被访问的顶点w2...
重复上述过程,当不能再继续向下访问时,依次退回到最近被访问的顶点
若它还有邻接顶点未被访问过,则从该点开始继续上述搜索过程,直到图中所有顶点被访问过为止
BFS广度优先遍历(非递归,队列)
类似二叉树的层次遍历
首先访问起始顶点v,接着由v出发,依次访问v的各个未访问过的邻接顶点w1,w2...wi
然后再依次访问w1,w2...wi的所有未被访问过的邻接顶点,再从这些访问过的顶点出发,再访问它们所有未被访问过的邻接顶点...
依次类推,直到图中所有顶点都被访问过为止
4.简述堆和二叉排序树的区别。
1)结构上:
二叉排序树的所有左子树的结点都小于根结点,根结点又小于所有右子树的结点。
而堆(小根堆):根结点小于左右子树,但是左右子树没有大小之分。
2)作用上:
二叉排序树是用来做查找的,而堆是用来做排序的。