####数据结构对于涉及计算机的任何岗位应该都是必不可少的,“入门”的方法也有很多,比如看书或者视频跟着敲代码,持之以恒。
1---栈和队列的区别
栈:后进先出,只能在一端进行出栈入栈操作,遍历从栈顶开始
队列:有队头队尾,队头出栈,队尾进栈,先进先出,两端遍历
栈的特点及实际应用
浏览器回退
括号匹配,后缀表达式
进制转换
队列应用:消息队列,进程调度
2----排序算法有哪些,复杂度是多少
简单插入排序
希尔排序
冒泡排序
快速排序
选择排序
归并排序
堆排序
基数排序
计数排序:不基于比较
桶排序:映射函数
3----快排和归并排序,复杂度
具体的思想可以自行百度一下,只要理解透了就不会忘记
4----链表和数组的区别
数组:顺序。连续内存空间,随机访问,查询修改方便,稳定
链表:链式,不连续,插入删除方便,指针连接,动态
5----二分查找的时间复杂度是多少
查找算法:顺序查找,二分查找,分块查找,哈希表查找
折半查找:O(log2n)
红黑树:平衡查找树
根节点黑色,
叶子节点黑色,
红节点的子节点黑色,
任意节点到叶子节点的路径包含相同数目的黑节点
叶节点到根不能有连续两个红节点
6------如何不用递归,实现二叉树的前序遍历
循环、栈
//前序非递归
void _PreOrderNR(pNode _pRoot){
pNode pCur = _pRoot;
stack<pNode> s;
while (pCur || !s.empty()){
//将左侧节点依次压栈
while (pCur){
cout << pCur->_data << " ";
s.push(pCur);
pCur = pCur->_pLeft;
}
//开始依次访问栈顶节点的右子树,通过循环将该右子树的左侧节点依次压栈
pNode pTop = s.top();
s.pop();
pCur = pTop->_pRight;//循环的子问题
}
}
7-----从数组中找出三数之和为n
#两数和
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
res = []
len1, minM = len(array), 10000000
if len1 < 2: return res
for i, value in enumerate(array):
if (tsum - value) in array[i+1:]:
if value*(tsum - value)<minM:
minM = value*(tsum - value)
res = [value, tsum - value]
return res
def Sum3(arr, target):
arr.sort()
len1 = len(arr)
res = []
if len1<=2: print(res)
for i in range(len1 - 1):
left, right = i + 1, len1 - 1 # 以下思路与2sum中的快速排序思想一样
while left < right:
sum = arr[i] + arr[left] + arr[right]
if sum == target and [arr[i], arr[left], arr[right]] not in res:
res.append([arr[i], arr[left], arr[right]])
left += 1
right -= 1
elif sum < target:
left += 1
else:
right -= 1
print(res)
if __name__ == '__main__':
arr = [int(i) for i in input().split()]
target = int(input())
Sum3(arr, target)
8-----数组结构如何转换成树结构,说说思路
字符串数组
分割
正则
9------哈希算法
根据设定的哈希函数H(key)和处理冲突的方法将一组关键字影像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便成为哈希表,这一映像过程称为哈希造表或散列,所得存储位置称哈希地址或散列地址。
哈希函数是指:有一个对应关系 f ,使得每个关键字和结构中一个唯一的存储位置相对应,这样在查找时,我们不需要像传统的查找算法那样进行比较,而是根据这个对应关系 f 找到给定值K的像f(K)。
哈希函数也可叫哈希算法,它可以用于检验信息是否相同(文件校验),或者检验信息的拥有者是否真实(数字签名)
---------------------------------------------------------------------------------------------------
还有一些问题可以自己百度了解下:
- 排序算法知道哪些?快排的思想,时间复杂度(最优,最差)?
- 数据结构hashmap,不用map如何实现?
- static作用,数组,栈,队列,指针