一、从那几个方面考量一个算法?
- 1、时间复杂度
- 2、空间复杂度
- 3、正确性
- 4、可读性
- 5、健壮性
二、算法有哪些特性?
- 1、有穷性,算法必须在有限的步骤之后完成
- 2、确切性,每一步必须有确切意义
- 3、具有0个或多个输入项
- 4、具有1个或多个输出
- 5、具有可行性(或有效性)
三、简述堆、栈和队列的区别:
(比喻:栈:吃多了吐;队列:吃多了拉😆)
①堆(Heap)是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。通常是一个可以被看做一棵树的数组对象,也总是一棵完全二叉树。
②栈(Stack)(又叫堆栈),就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。(后进先出)
③队列(Queue)只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。(先进先出)
四、线性表的基本操作有哪些?
初始化(创建),插入元素,查找元素,删除元素,修改指定位置的元素,得到指定位置的元素,请空表等。
五、二叉树中的先序遍历、中序遍历和后序遍历的顺序
(前序遍历、中序遍历和后续遍历都属于深度优先的遍历,都是相对于根节点而言的前、中
后,都是一头咋到底,先找到叶子节点再回溯)
- 前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。
A B D H E C F G
- 前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。
2.中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。
H D B E A F C G3.后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。
H D E B F G C A
另外如果是层序遍历,从上到下按层次访问树
A B C D E F G H
六、散列表的特点和用途
散列表(也叫哈希表),是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)的比较操作。
散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必须要再数据元素的存储位置和它的关键字(可用的key)之间建立一个确定的对应关系,使每个关键字和散列表中一个唯一的存储位置相对应。因此在查找时,只要根据这个对应关系找到给定关键字在散列表中的位置即可。这种对应关系被称作散列函数(可用h(key)表示)。
根据设定的散列函数h(key)和处理冲突的方法将一组关键字key映射到一个有限的连续地址区间上,并以关键字在地址区间中的像作为数据元素在表中的存储位置,这种表便被称为散列表,这一映像过程称为散列,所得存储位置称为散列地址。
七、冒泡排序和选择排序的优缺点
冒泡排序是稳定排序(即每次结果都一样),选择排序是非稳定排序。
冒泡排序需要开辟新的内存空间以供交换操作,交换次数多,效率低。
选择排序相对于冒泡排序交换次数少,效率较高。