《数据结构》陈越——习题及解析一

 一、基本概念

  • 时间复杂度

《数据结构》陈越——习题及解析一_第1张图片

《数据结构》陈越——习题及解析一_第2张图片

二、线性结构 

  • 线性表及其实现

《数据结构》陈越——习题及解析一_第3张图片

《数据结构》陈越——习题及解析一_第4张图片

解析:因为顺序存储的方式是数组,故在数组中查找第k个元素,一步就能找到;在链式存储结构中,其存储形式是使用链表,由于每个节点都存储了下一个节点的地址,因此无法一下子知道第k个元素在哪里,需要一步步的查找,寻找第k个元素需要查找k步。 

 

《数据结构》陈越——习题及解析一_第5张图片

解析:应该改为:

int Length(List *PtrL)
{
    List *p = PtrL;
    int j = 0;
    while(p)
    {
        p = p->Next;
        j++;
    }
    return j;
}
  • 堆栈

《数据结构》陈越——习题及解析一_第6张图片

解析: 对于堆栈来说,插入和删除操作只在链栈的栈顶进行,故对于1->2->3来说,栈顶在1处,故删除1,然后插入4,得到4->2->3.

《数据结构》陈越——习题及解析一_第7张图片

《数据结构》陈越——习题及解析一_第8张图片

解析:

3、栈中依次入栈的是减号“—”、左括号“(”、减号“—”、除号“/”、右括号“)”,这些已经需要堆栈大小为5了,碰到右括号之后,开始进行相应的运算,所有运算符做出栈操作,运算完毕后,继续接下来的运算。

4、出栈是按后进先出的规律,依次按顺序出栈的,

  • 队列 

《数据结构》陈越——习题及解析一_第9张图片

解析:

1、不是想当然的8-2=6,就是6个元素,而是需要结合循环队列的规律进行相应的判断,front是队列的头,rear是队列的尾,插入在rear处进行,删除在front处进行,可自行画图分析。

2、对于原本队尾的r节点中存储的下一个节点的地址信息r->Next,用s对其进行赋值,因为插入s是在队尾进行,s的插入使得s成为了队列的最后一个节点,因此,需要将s赋值给r。

 

 

  • 树与树的表示

《数据结构》陈越——习题及解析一_第10张图片

解析:判定树上每个结点需要的查找次数刚好为该结点所在的层数。(将11个元素的二分查找写成判定树的形式),结果一目了然。

《数据结构》陈越——习题及解析一_第11张图片

解析:对于儿子-兄弟表示法,其每个结点寻存三个数据结点本身此结点的第一个儿子此结点的下一个兄弟),故所需空间为3n。

《数据结构》陈越——习题及解析一_第12张图片
解析:将二分查找的判定树画出(判定树上每个结点需要的查找次数刚好为该结点所在的层数),然后进行相应的相加比较即可知道

你可能感兴趣的:(数据结构与算法,树,时间复杂度,堆栈,队列,二分查找)