数据结构题错题笔记

数据结构

c是面向过程,c++面向对象,JAVA面向对象,汇编是面向机器

一个树的深度和高度的区别:

​ 深度:向下数,少的那个,层数,根节点为第一层

​ 高度:向上看,楼层,层数+1

对于图求最小生成树的两种常用算法

Kruskal算法:只判断边,从边最小的开始,然后依次找次小的,需要先判断是否成环,如果成环,则跳过进行下一次比较

Prim算法:先要确定一个顶点,然后从这个顶点开始找与他相连权值最小的边对应的顶点,然后以这两个点为确定值,找与这两个点相关联的权值最小的点。同时也要判断是否成环,如果成环则找次小的。

二叉树:

最佳二叉树是哈夫曼树,不是平衡二叉树,哈夫曼树是指加权路径最短,哈夫曼树不一定是平衡二叉树

“*strcpy函数的作用是把含有’\0’结束符的字符串复制到另一个地址空间。*遇到/0就结束。

例题:

求图的最小生成树算法:

1.Prim算法(适合稠密图,贪心算法的运用,时间复杂度O(n+e),邻接表存储;O(n^2),图 )

2.Kruskal算法(适合稀疏图,贪心算法的运用,时间复杂度O(eloge),e为边数 )

求图最短路径算法:

1.DFS/BFS(单源)

2.Floyed算法(多源)

3.Dijkstra算法(单源)

4.Bellman-Ford算法(单源,负权)

DFS遍历:深度优先遍历

BFS遍历:广度优先遍历

1:简单选择 最好时间 O(n^2) 平均时间O(n^2) 最坏时间 O(n^2)

2:直接插入 最好时间 O(n) 平均时间O(n^2) 最坏时间 O(n^2)

3:冒泡排序 最好时间 O(n) 平均时间O(n^2) 最坏时间 O(n^2)

4:希尔排序 最好时间 O(n) 平均时间O(logn) 最坏时间 O(n^s) 1<s<2

5:快速排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(n^2)

6:堆排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(nlogn)

7:归并排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(nlogn)

节点数:度为二的节点有n个,度为零的有N+1个

在有N个结点的二叉链表中必定有2N个链域。

除根结点外,其余N-1个结点都有一个父结点。

所以,一共有N-1个非空链域,其余2N-(N-1)=N+1个为空链域。

线索数二叉树

求符合前中后序线索树定义

先根据二叉树写出对应的前中后序顺序,然后根据这个顺序分别判断每个节点,用虚线表示,

考虑每个结点,当左孩子为空时,指向前驱;右孩子为空时指向后继。(用虚线)

结点d,无左右孩子,则指向前驱null,后继b

结点b, 无左孩子,则指向前驱d

结点c,无左右孩子,则指向前驱b,后继a

结点a, 有左右孩子。

顺序表与链表的比较

  • 基于空间的比较
    • 存储分配的方式
      • 顺序表的存储空间是静态分配的
      • 链表的存储空间是动态分配的
    • 存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量
      • 顺序表的存储密度 = 1
      • 链表的存储密度 < 1
  • 基于时间的比较
    • 存取方式
      • 顺序表可以随机存取,也可以顺序存取
      • 链表是顺序存取的
    • 插入/删除时移动元素个数
      • 顺序表平均需要移动近一半元素
      • 链表不需要移动元素,只需要修改指针

synchronized Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

notify(): 是唤醒一个正在等待该对象的线程。
notifyAll(): 唤醒所有正在等待该对象的线程。

wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。

有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。

+=会自动强转(自动装箱功能),但是+必须要手动强转b=(byte)(a+b)

对于字符串:其对象的引用都是存储在栈中的,如果是【编译期已经创建好(直接用双引号定义的)的就存储在常量池中】,如果是【运行期(new出来的)才能确定的就存储在堆中】。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

进出栈操作

进栈 push()
入栈:在栈顶(数组的尾部)添加指定的元素,并返回新数组的长度。
出栈 pop()
出栈:删除栈顶(数组的尾部)的一个元素,并返回删除的元素。
其他
shift():删除数组头部的第一个元素,并返回删除的元素。
unshift():在数组头部的第一个元素前添加一个元素,并返回新数组的长度。

关于循环队列的一些计算问题:

front为队头、rear为队尾、maxSize为队列的总容量、m为队列中元素的个数:

队空:front = rear

队满:(rear + 1) % maxSize = front

进队:rear = (rear + 1) % maxSize

出队:front = (front + 1) % maxSize

ize为队列的总容量、m为队列中元素的个数:

队空:front = rear

队满:(rear + 1) % maxSize = front

进队:rear = (rear + 1) % maxSize

出队:front = (front + 1) % maxSize

队列中元素的个数 m = (rear - front + maxSize) % maxSize

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于西安理工大学863数据结构的真情况,根据引用[1]的信息,近几年的真难度不大,更注重知识点的广度而不是深度。因此,考取一个较高的分数并不是很困难,但如果想要获得更高的分数,就需要对课本上的每一个知识点都非常熟悉。建议在学习过程中,先重点掌握基础知识,少看难,如果有余力可以参考王道教材。 关于复习规划,根据引用[3]的建议,理工大的专业课只考一门数据结构,因此不需要太早开始复习。前期可以以数学和英语为主,专业课可以在七月中旬开始复习。建议第一遍过一遍PPT和天勤的知识点,并做天勤书上的小巩固。第二遍可以做理工大课本的课后和理工大的库。第三遍可以做早年真、早年期末数据结构考试样。第四遍可以做近几年的期末并理解记忆算法笔记。最后,在十二月份可以使用16-19年的真进行全真模拟考试。需要注意的是,以上过程需要不断回顾和复习前面学过的知识和错题,这样才能真正提高。 关于辅导材料,根据引用[2]的建议,购买一本理工大的数据结构课本(胡元义主编)和天勤数据结构辅导书就足够了。如果有余力,可以再购买一本王道教材,用于解决一些难度较高的目。不需要再购买其他辅导材料。 综上所述,复习西安理工大学863数据结构的真可以参考以上的复习规划和建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值