Data Structure
.............
托尼stark
你能从现在开始改变,也可以一成不变。
展开
-
二叉树的创建、添加节点、先序、中序和后序遍历
class Node(object): """结点类""" def __init__(self, item): self.item = item self.lchild = None self.rchild = Noneclass BinaryTree(object): """二叉树""" def __init...原创 2019-04-03 23:06:58 · 497 阅读 · 0 评论 -
python实现双向链表
class Node(object): """结点类""" def __init__(self, item): self.item = item self.next = None self.pre = Noneclass DoubleLinkList(object): """双向链表""" def __in...原创 2019-04-13 22:17:53 · 142 阅读 · 0 评论 -
python实现单链表
class Node(object): # 结点类 def __init__(self, item): self.item = item self.next = Noneclass SingleLinklist(object): # 单链表 def __init__(self, node=None): self...原创 2019-04-13 22:11:58 · 278 阅读 · 1 评论 -
时间复杂度与空间复杂度
单靠时间值衡量算法的时间复杂度绝对可信吗?假设我们将一个算法程序运行在一台配置古老性能低下的计算机中,情况会如何?很可能运行的时间并不会比在我们的现在的电脑中运行快多少。单纯依靠运行的时间来比较算法的优劣并不一定是客观准确的!程序的运行离不开计算机环境(包括硬件和操作系统),这些客观原因会影响程序运行的速度并反应在程序的执行时间上。那么如何才能客观的评判一个算法的优劣呢?时间复杂度:假设存...原创 2019-04-01 09:49:26 · 136 阅读 · 0 评论 -
冒泡排序详解及两种改进方案
冒泡排序的基本思想: 1.对于一个待排序的序列,我们从第一个元素开始,让它依次与后面的元素进行比较,如果后面的元素比它大,就交换它们两个的位置,依次进行两两比较,这样一趟比较完就能选出一个最大的元素(默认是升序)至序列的末尾。 2.第二次我们从待排序序列的第二个元素开始,按照步骤1的方法,也让它依次与后面的元素进行比较,这样就能找到待排序序列中第二大的数。 3.重复上述步骤,直至序...原创 2019-03-20 19:38:50 · 4416 阅读 · 0 评论 -
二分(折半)查找
#1.非递归实现(待查找的元素必须在一个有序的序列中)def binary_search(alist,value): first=0 last=len(alist)-1 while first<=last: mid=(first+last)//2 if alist[mid]==value: return Tr...原创 2019-04-01 09:14:31 · 145 阅读 · 0 评论 -
归并排序
#时间复杂度:最优时间复杂度:O(nlogn) 最坏时间复杂度:O(nlogn)#算法稳定性:稳定def merge_sort(alist): n=len(alist) if n==1: return alist mid=n//2 #对左半部分进行归并排序: left_sorted_li=merge_sort(alist[:mid])...原创 2019-04-01 09:07:52 · 104 阅读 · 0 评论 -
快速排序
快速排序:是对冒泡排序的一种改进,其思想基于分治法。算法思想:在待排序列表L[1...n]中任取一个元素pivot作为基准,通过一趟排序将待排序表划分为独立的两部分L[1,...k-1]和L[k+1,...n],使得L[1,...k-1]中所有元素均小于pivot,L[k+1,...n]中所有元素均大于或等于pivot,则pivot放在了其最终位置L(k)上,这个过程为一趟快速排序。然后分别...原创 2019-04-01 09:05:11 · 128 阅读 · 0 评论 -
希尔排序过程详解及代码实现
希尔排序:算法思想:先将待排序列表分割成若干个形如L[i,i+d,i+2d,...i+kd]的特殊子表,分别进行直接插入排序,当整个表中元素已呈"基本有序"时,再对全体记录进行一次直接插入排序。希尔排序过程(王道数据结构):先取一个小于n的步长d1,把表中全部元素怒分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组中进行直接插入排序;然后取第二个步长d2<d1,重复...原创 2019-04-19 12:41:47 · 984 阅读 · 0 评论 -
插入排序详解及代码实现
插入排序(直接插入排序) :假设有待排序表L[1...n]:有序序列L[1...i-1] L(i) 无序序列L[i=1...n] 算法思想:初始假定L[1]是一个已经排好序的子序列,然后将L(2)~L(n)依次插入到前面已排好序的子序列,执行该操作n-1次就能得到一个有序表,在从后向前的比较过程中,需要反复把已排序元素逐步向后移位,为新元素提供插入空间。def inser...原创 2019-04-01 08:59:51 · 281 阅读 · 0 评论 -
选择排序详解及代码实现
选择排序(简单选择排序) 算法思想:假设排序表为L[1...n],第i趟排序即从L[i...n]中选择关键字最小的元素与L(i)进行交换,每一趟排序都可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。例如待排序序列:[65,13,97,76,49,27,49],则分为如下的情况:有序序列 无序序列 i=1 i=2,3,4,...n 65...原创 2019-04-01 08:56:31 · 446 阅读 · 0 评论 -
python实现单向循环链表
class Node(object): """结点类""" def __init__(self, item): self.item = item self.next = Noneclass CycleSingleLinkList(object): """单向循环链表""" def __init__(self, node=N...原创 2019-04-13 22:20:58 · 285 阅读 · 0 评论