数据结构

本文深入探讨了数据结构中的二叉树、链表及其操作,包括链表的反转,二叉树的遍历与查找,以及堆树的概念与操作。同时,介绍了卡塔兰数在二叉树计数中的应用,提供了算法的时间与空间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.youkuaiyun.com/Strive_0902/article/details/81636009

 

  • 某二叉查找树的每个节点存放一个整数,中序遍历该树得到的序列为3,4,5,则该树的画法有多少种情况?


  • 对于最大堆64,42,58,23,36,47,56,11,22,27,4,2;删除掉最大元素后,调整后堆中元素为?

堆树的定义如下:

(1)堆树是一颗完全二叉树;

(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;

(3)堆树中每个节点的子树都是堆树。

  • 最大或最小堆删除的对顶元素之后,将最后一个叶子结点补到对顶元素,然后再调整;
  • 最大对或最小堆插入元素也是,先插入到新的最后一个叶子节点,然后再调整;

当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示,左边为最大堆,右边为最小堆。

所以存储的顺序变成

58,42,56,23,36,47,2,11,22,27,4
 

  • 一个简单无向图有10个顶点,11条边,如果用邻接矩阵来存储它,那么矩阵里面会有多少个0?

      10x10-(11x2) = 78


  • 有一个完全二叉树的叶子节点个数为1234个,那么它最多有()个节点


  • 假设一棵二叉排序树的节点的值均为10到20的整数,如果在这棵树里查找15,以下哪个序列是不可能存在的?

 20,19,18,17,16,15

14,19,18,16,15

12,13,20,14,18,15

11,12,19,13,18,17,14,16,15

12,18,16,13,14,17,15

解析:二叉排序树具有的特点是对于一个父节点一定有:左孩子小于右孩子的值,按照这个逻辑,可以看出来,只有最后一个不满足条件


时间复杂度和空间复杂度

个人理解,时间复杂度是程序对每个元素遍历的次数,for循环的次数(直观的来说),

空间复杂度是完成题目的要求,需要另开辟的空间大小,比如O(1)就是,只能申请一个temp的临时变量的空间



时间复杂度的迭代求解

 


卡塔兰数:

具有n个节点的二叉树有几种?


单链表和双向链表的插入与删除


单链表的反转

定义链表的结点


 
  1. struct ListNode {
  2. int val;
  3. struct ListNode *next;
  4. ListNode( int x) :
  5. val(x), next( NULL) {
  6. }
  7. };

为了避免“断链”,我们必须在指针更改指向之前,保存修改结点的下一结点。同时我们也必须存储上一个结点,因为next域即将修改指向该结点。因此定义三个指针,分别指向当前遍历的结点,前一个结点和后一个结点。


 
  1. ListNode* ReverseList(ListNode* pHead) {
  2. ListNode *root=pHead;
  3. ListNode *pre= NULL;
  4. ListNode * next= NULL;
  5. if(pHead== NULL) return NULL;
  6. while(root-> next){
  7. next=root-> next;
  8. root-> next=pre;
  9. pre=root;
  10. root= next;
  11. }
  12. root-> next=pre;
  13. return root;
  14. }

跳出while循环的时候,最后一个结点的next域别忘记指向前一个结点,否则就会导致“断链”。

 

 

 

 

 

 

 

 

第一章 绪论 一、选择题 1. 算法的计算量的大小称为计算的( ) 。 【北京邮电大学 2000 二、3 (20/8 分) 】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( ) 【中科院计算所 1998 二、1 (2 分) 】 A.问题的规模 B. 待处理数据的初态 C. A 和B 3.计算机算法指的是(1) ,它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2 分) 【武汉交通科技大学 1996 一、1( 4 分) 】 4.一个算法应该是( ) 。 【中山大学 1998 二、1(2 分) 】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A 和C. 5. 下面关于算法说法错误的是( ) 【南京理工大学 2000 一、1(1.5 分) 】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是( ) 【南京理工大学 2000 一、2 (1.5 分) 】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模 n 下,复杂度 O(n)的算法在时间上总是优于复杂度 O(2 n )的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为( )两大类。 【武汉交通科技大学 1996 一 、4(2 分) 】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是( ) 。 【北方交通大学 2000 二、1(2 分) 】 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构( )?【北方交通大学 2001 一、1(2 分) 】 A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?( ) 【北方交通大学 2001 一、2(2 分) 】 A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对 x 的赋值语句的频度为( ) 【北京工商大学 2001 一、10(3 分) 】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n 2 ) D.O(log2 n ) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中 n 为正整数,则最后一行的语句频度在最坏情况下是( )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值