一、基本概念
- 时间复杂度
二、线性结构
- 线性表及其实现
解析:因为顺序存储的方式是数组,故在数组中查找第k个元素,一步就能找到;在链式存储结构中,其存储形式是使用链表,由于每个节点都存储了下一个节点的地址,因此无法一下子知道第k个元素在哪里,需要一步步的查找,寻找第k个元素需要查找k步。
解析:应该改为:
int Length(List *PtrL)
{
List *p = PtrL;
int j = 0;
while(p)
{
p = p->Next;
j++;
}
return j;
}
- 堆栈
解析: 对于堆栈来说,插入和删除操作只在链栈的栈顶进行,故对于1->2->3来说,栈顶在1处,故删除1,然后插入4,得到4->2->3.
解析:
3、栈中依次入栈的是减号“—”、左括号“(”、减号“—”、除号“/”、右括号“)”,这些已经需要堆栈大小为5了,碰到右括号之后,开始进行相应的运算,所有运算符做出栈操作,运算完毕后,继续接下来的运算。
4、出栈是按后进先出的规律,依次按顺序出栈的,
- 队列
解析:
1、不是想当然的8-2=6,就是6个元素,而是需要结合循环队列的规律进行相应的判断,front是队列的头,rear是队列的尾,插入在rear处进行,删除在front处进行,可自行画图分析。
2、对于原本队尾的r节点中存储的下一个节点的地址信息r->Next,用s对其进行赋值,因为插入s是在队尾进行,s的插入使得s成为了队列的最后一个节点,因此,需要将s赋值给r。
- 树与树的表示
解析:判定树上每个结点需要的查找次数刚好为该结点所在的层数。(将11个元素的二分查找写成判定树的形式),结果一目了然。
解析:对于儿子-兄弟表示法,其每个结点寻存三个数据(结点本身,此结点的第一个儿子,此结点的下一个兄弟),故所需空间为3n。
解析:将二分查找的判定树画出(判定树上每个结点需要的查找次数刚好为该结点所在的层数),然后进行相应的相加比较即可知道