数据结构容易记错的地方总结

1.带头结点与不带头节点单链表的区别

不带头节点:此时头指针指向第一个节点

h->a1->a2->a3->……           // 头指针存放的是第一个节点的地址,即h,也就是说(*h)表示的是第一个节点

带头结点:此时头指针指向头结点

h->headnode->a1->a2->a3->……      // 头指针存放的是头结点的地址,也就是说(*h)表示的是头结点
● 空表的比较

//不带头节点
  h = NULL;    // h 表示的是第一个节点的地址,h = NULL 表示第一个节点的地址为空,也就是空表

// 带头结点
   h->next = NULL;  // h 表示的是头结点的地址,h->next 就是头结点的下一个节点,即首元节点为空,也就是空表

链表节点结构为(data,next)。设有单循环链表,指针last指向链表尾部,现在要在链表首部插入节点s,则应该执行下面哪一种操作?[ ]

s.next=last.next; last.next=s;last=s;

3。

在下列排序算法中,如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( 简单选择排序 )方法最快。当然冒泡排序最小上冒也可以

4.弄懂希尔排序
5.快速排序流程


一组记录的关键字为{46,79,56,38,40,84},则利用快速排序方法,以第一个记录为基准得到的第一次划分结果为(    )。

答案
40,38,46,56,79,84

如果不会参考https://blog.csdn.net/adusts/article/details/80882649

6.题目:一个具有n个节点的完全二叉树,其叶子节点的个数为多少?

分析:

   设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2

   侧有 

            n0+n1+n2=n                (1)

   对于二叉树有:

            n0=n2+1                       (2)

   由(1)(2) ==>

            n0=(n+1-n1)/2              (3)

   由完全二叉树的性质可知:n1=0 或 1

总结:

    (a):当n1=0时(即度为1的节点为0个时,此时n为奇数)或者n为奇数时

          n0= (n+1)/2;

    (b):当n1=1时(即度为1的节点为1个时,此时n为偶数)或者n为偶数

         n0= n/2;

  综合(a)(b)可得:

    (结论):一个具有n个节点的完全二叉树,其叶子节点的个数n0为: n/2 向上取整,或者(n+1)/2 向下取整

7.next【j】求法
已知模式串P为“abcaabc”,与模式串P对应的next[j]数组的值是-1,-1,-1,0,0,1,2
不懂或忘了参考https://blog.csdn.net/qq_41437694/article/details/89282224

一个二叉树按顺序方式存储在一个一维数组中, 如图
在这里插入图片描述

结点D的右孩子节点是____G__。

如图所示的一棵普通树,将其转换成二叉树,然后写出其二叉树的中序遍历结果是( )
在这里插入图片描述
答案: BEGFCDA(想一想为什么)
森林的先序和后序遍历即对应二叉树的先序和中序遍历。

10.二叉树的链式存储方式
在这里插入图片描述
画出图

11.1、森林转二叉树
(1)、把每棵树转换为二叉树
(2)、第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。
在这里插入图片描述
转换规则:兄弟相连,长兄为父,孩子靠左。 (参考https://www.cnblogs.com/zhanggui/p/4649114.html)
exp:
将森林 F 转换为对应的二叉树 T, F 中叶结点的个数等于( )

A.T 中叶结点的个数

B.T 中度为 1 的结点个数

C.T 中左孩子指针为空的结点个数

D.T 中右孩子指针为空的结点个数
答案:c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值