摘要:一、如何理解队列 可以想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进先出,这就是典型的队列。 栈只支持两个基本操作:入栈和出栈。队列和栈非常相似,支持的操作也很有限,基本的操作也是两个:入队,放一个数据到队列尾部;出队,从队列头取一个元素。所以队列和栈一样,也是一种操作受限的线性表
阅读全文
摘要:一、如何理解栈 举例说明一下,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插
阅读全文
摘要:时间复杂度 数组 链表 插入、删除 O(n) O(1) 随机访问 O(1) O(n) 数组在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而连败哦在内存中不连续,所以对CPU缓存不友好,没办法预读。 数组的缺点是大小固定,一经声明就会占用整块连续内存空间
阅读全文
摘要:数组和链表是两个非常基础、非常常用的数据结构。 两者的区别:从底层的存储结构来看,数组需要一块连续的内存空间来存储,对内存的要求比较高。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 三种常见的链表结构:单链表、双链表和循环链表。 单链表 概念定义: 我
阅读全文
摘要:visited = set() def dfs(node, visited): visited.add(node) #process current node here ... for next_node in node.children(): if not next_node in visited
阅读全文
摘要:def BFS(graph, start,end): queue = [] queue.append(start) visited.add(start) while queue: node = queue.pop() visited.add(node) process(node) nodes = g
阅读全文
摘要:def divide_conquer(problem, param1, param2, ...) #recursion terminator if problem is None: print_result return #prepare data data = prepare_data(probl
阅读全文
摘要:def recursion(level, param1,param2, ...): #recursion terminator if level >MAX_LEVEL: print_result return #process logic in current level process_data(
阅读全文