数据结构面试题

一、单链表、双链表、循环链表

3355903-db43dac99a7fa562.png

二、快慢指针

1.判断是否有环

一个指针一步走2下,一个指针一步走1下
如果两个指针相遇,则有环

2.找出环的入口

同上,相遇后,一步走2下的指针重新走,改成一步走1下
直到两个追针相遇,则相遇的地方是环的入口

3.找出单链表中倒数第m个数

一个指针先走m步,之后另一个指针重新开始也跟着一起走
直到先走m步的指针走到尾,则另一个指针指向的数据是倒数第m个人数

三、大数据

如何对一个很大的数据(1T)进行排序

第一步、根据内存分成若干组(在内存承受范围内
第二步、对每一组进行排序(从小到大
第三步、拿第一组的第一个值作为参照物,然后依次取每一组的第一个值,若比该值小(从小排到大)则拿该值替换为参照物,并记录该值是第几份
直到遍历完一次,则参照值为最小值,将其存入硬盘,并且将该值从其所在的位置中删除
第四步、重复第三步操作,直至拍完
特点:每次只排一个数,不怕内存不足
优点:内存占用低
确定:时间复杂度高

改进:
第三步、第一次取出每组的前两个值进行排序,记录取出的组的第二个值最小的位置,将此值和此值之前的值全部值存入(若下次取会内存不足,则将剩余的数追加为一组数据,参与排序中
第四步、每次取出每组的第一个数,并记录最小值的位置,将此值和此值之前的值全部值存入(若下次取会内存不足,则将剩余的数追加为一份数据,参与排序中
第五步、重复第四步

你可能感兴趣的:(数据结构面试题)