算法之递归、循环、查找

算法与数据操作也是面试时经常问到的题目。很多算法都有递归和循环的实现,同时查找和排序也是很基础的内容,除此之外,回溯法、贪心法、动态规划等针对一类问题的算法都是非常重要的。 --> 1 递归与循环 通常基于递归的代码比较简洁,也比较容易实现,但性能却不如基于循环的实现方法,因为递归时会存在额外的函数调用,内存栈操作以及重复计算,甚至有时会出现调用栈溢出的情况。 ...

算法之排序

算法与数据操作也是面试时经常问到的题目。很多算法都有递归和循环的实现,同时查找和排序也是很基础的内容,除此之外,回溯法、贪心法、动态规划等针对一类问题的算法都是非常重要的。 --> 1 排序 插入排序、冒泡排序、归并排序、快速排序的特点及分析。 1.1 插入排序 插入排序的思想是通过构建有序序列,对未排序的序列,在已排序的序列中从后往前扫描,找到 ...

数据结构之树

作为一名程序猿,想在面试的时候游刃有余,首先要熟练掌握数组、字符串、链表、树、栈、队列这几种基础的数据结构。 --> 1 树 树的结构:除根节点外每个节点只有一个父节点,根节点没有父节点;除叶节点外每个节点只有一个或多个子节点,叶节点没有子节点。父节点和子节点用指针链接。 树的遍历:前序遍历、中序遍历、后序遍历,其递归和循环实现都要熟练掌握。此外还有广度优先遍 ...

数据结构之栈与队列

作为一名程序猿,想在面试的时候游刃有余,首先要熟练掌握数组、字符串、链表、树、栈、队列这几种基础的数据结构。 --> 1 栈与队列 栈是一个非常常见的数据结构,其特点是先进后出,操作系统在函数调用便会使用栈结构。 栈是一个不考虑排序的数据结构,因此查找最大最小元素的时间复杂度为 O(n),若想要在 O(1) 时间内得到栈的最大最小值,则需要对栈做特殊的 ...

数据结构之链表

作为一名程序猿,想在面试的时候游刃有余,首先要熟练掌握数组、字符串、链表、树、栈、队列这几种基础的数据结构。 --> 1 字符串 C/C++ 中字符串一般以 '\0' 作为结尾,因此可以很方便地寻找字符串的最后。 但是注意字符串的实际长度要考虑 '\0' 的存在。 字符串的拷贝一般从后向前,可以避免覆盖以及额外的工作量。 2 链表 ...