python数据结构
文章平均质量分 75
mzm1991
这个作者很懒,什么都没留下…
展开
-
python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
N皇后问题 棋盘ADT#-*-coding: utf-8-*-# 二维数组实现棋盘ADTfrom myarray2d import Array2Dclass Board(object): def __init__(self, n): self._board = Array2D(n, n) self._size = n原创 2017-01-08 21:17:04 · 1582 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-14-01-散列表
11.1 简介 基于比较的搜索(comparison-based searches):通过元素之间的相互比较,在容器中搜索特定的元素。之前的线性搜索和二分法搜索都是基于比较的搜索,其时间复杂度也就仅能达到O(log n)。 对于由几个正整数组成的集合 将上述各数映射到[100, 199]的数组内,即 这时,我们就可以原创 2016-12-31 18:44:34 · 510 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-12-03-八皇后问题
10.5 八皇后问题 问题描述 在国际象棋8 × 8的棋盘上放置8个皇后,使得每一个皇后都不能被另一个皇后攻击(皇后可在横竖斜走任意多步)。 10.5.1 解决四皇后问题 先将问题规模缩小,我们先来解决四皇后问题。 在4 × 4的棋盘上,皇后可以在横竖斜三个方向上走任意多步,所以这四个皇后必然处于不同行、原创 2016-12-31 18:43:40 · 391 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-12-02-递归的应用
10.4 递归的应用 10.4.1 递归二分法搜索 二分法搜索,可以采用递归的形式,其时间复杂度仍是O(log n)。但不同的是,每一次函数调用的时间复杂度是O(1),只是整个算法的最坏情况总共调用了log n次,因此时间复杂度仍是O(log n)。#-*-coding: utf-8-*-# 二分法搜索的递归形式def recBinarySearc原创 2016-12-31 18:42:20 · 296 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-11-01-递归
递归(recursion):通过将大问题分解成几个相对简单的且解法相同或类似的子问题,来将问题解决的方式。 10.1 递归函数 一个可以调用自身的函数称为递归函数(recursive function)。 递归调用(recursive calls) 递归展开(recursive unwinding) 1原创 2016-12-31 18:40:36 · 359 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-02-01-栈的应用
7.3 应用 7.3.1 括号匹配 无论是在计算表达式还是在C++代码中,都会碰到括号匹配问题。如以下的C++代码:int sumList(int theList[], int size){ int sum = 0; int i = 0; while(i < size) { sum += theList[i]; i += 1;原创 2016-11-02 20:41:10 · 384 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-01-01-栈ADT及其实现
7.1 栈ADT 栈(stack)是只允许在一端进行插入或删除元素操作的储存容器,其特点是后进先出(last-in first-out, LIFO)。 其允许插入删除的一端称为栈顶(top),另一端称为栈底(bottom)。没有任何元素时称为空栈。 栈ADT应包含的属性:Stack():创建一个空栈;isEmpty():判断栈是否为空;l原创 2016-11-01 22:15:47 · 1041 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-07-01-完善后的mydate.py
这是经过完善后的date.py,重命名为mydate.py。#-*-coding: utf-8-*-# 通过儒略日格式实现公历日期from time import localtimeclass Date(object): # 创建公历日期实例对象 def __init__(self, month=localtime()[1], day=localtime()[2],原创 2016-10-07 14:22:44 · 344 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-27-01-链表
6.1 简介 结点(node):包含数据以及至少一个指向另一个结点的指针。 链式结构(linked structure):包含结点的容器。 链表(linked list):每个结点一个接一个串联起来的链式结构。 头结点:指向链表第一个结点(首元结点)的结点,其数据域不储存链表,其指针称为头指针(head pointer)。原创 2016-10-27 22:30:24 · 456 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-28-03-用链表实现多项式ADT
6.6 多项式 6.6.1 多项式操作 6.6.2 多项式ADTPolynomial():构造多项式实例,每一项系数初始化为零;Polynomial(degree, coefficient):构造多项式实例,次数为degree和系数为coefficient 的单项式;degree():返回多项式的最高次数;getitem(degree):返回多项式中原创 2016-10-29 00:12:42 · 1019 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
6.5 使用链表实现稀疏矩阵 6.5.1 实现 使用一个数组来储存稀疏矩阵的行,数组的一个元素指向稀疏矩阵的每一行,而每一行的非零元素以链表表示。所以每一个结点只需储存列号和相应的数值即可。#-*-coding: utf-8-*-# 使用排序链表的数组来实现稀疏矩阵from myarray import Arrayclass Spar原创 2016-10-28 23:15:46 · 829 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-09-01-文本编辑器
9.5 应用:文本编辑器 本节将多重链表应用于编辑缓冲ADT(Edit Buffer ADT)。 9.5.1 编辑操作 布局 通常将文本以行和列的形式组织起来。每一行有无限的长度,每一行的大小可能不同,但末尾都有换行符。一个空的文本,只有一行空行以及一个换行符。 文本光标 文本光标由行号以及原创 2016-11-09 20:56:51 · 889 阅读 · 1 评论 -
python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表
6.4.1 带尾指针的链表 在单链表的末尾,加上一个指针用于指向链表的最后一个结点。 追插元素(append) 在链表的最后一个结点,增加新的结点,如果使用尾指针的话,较为便利。只需将尾指针指向新结点,并将原来最后一个结点指向新结点即可。def append(head, tail, item): newNode = ListNode原创 2016-10-28 22:14:26 · 623 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-18-01-散列表ADT
11.5 散列表ADT 散列表ADT的实现代码如下:#-*-coding: utf-8-*-# 散列表ADT的实现from myarray import Arrayclass HashMap(object): # 定义散列表中每一项中状态的常数 UNUSED = None EMPTY = _MapEntry(None, None) #原创 2016-12-31 18:45:05 · 497 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-20-01-直方图ADT
11.6 直方图(histograms) 11.6.1 直方图ADT 直方图ADT所包含的方法如下:Histogram(catSeq):创建直方图,catSeq为指定的分类,每一个分类的频数初始化为零;getCount(category):返回给定分类的频数;incCount(category):给定分类的频数加一;totalCount():返回所有原创 2016-12-31 18:46:04 · 386 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-23-01-归并排序
12.1 归并排序 排序算法分为两大类:比较排序和分布排序 比较排序(comparsion sort):数据可以通过排序关键字的逻辑关系比较来实现升序或降序排列。这种逻辑关系比较基于数字大小或字母顺序。 分布排序(distribution sort):将所有排序关键字分成基于每一个关键字的中间组。 归并排序(merge sor原创 2016-12-31 18:46:48 · 426 阅读 · 0 评论 -
python数据结构学习笔记-2016-12-25-01-2-3 树
14.4 2-3 树 2-3 树是一种平衡树,其形状定义如下:每一个结点可储存1个或2个关键码,分别以k1和k2表示;每一个结点有2~3个子结点,分别为左子结点、中子结点和右子结点;所有的叶结点都在同一层;每一个内结点如果只有一个关键码,则其只有两个子结点,如果有两个关键码,则其有三个子结点。 对于每一个内结点来说,有:所有小于该原创 2016-12-31 18:56:11 · 763 阅读 · 0 评论 -
python数据结构学习笔记-2016-12-10-01-AVL树
14.3 AVL树 AVL树由G.M.Adel‘son-Velskii和Y.M.Landis在1962年发明的自平衡二叉查找树。如果一个二叉树,其左右两子树的高度最多相差1,则称该二叉树是平衡的(balanced)。 对于AVL树中的每一个结点,都有一个平衡因子(balance factor),以表示该结点的左右两分支的高度差,平衡因子有三种状态:原创 2016-12-31 18:55:32 · 920 阅读 · 0 评论 -
python数据结构学习笔记-2016-12-04-02-二叉搜索树
14.1 二叉搜索树 二叉搜索树(binaey search tree, BST)是一种二叉树,其内的每一个结点储存着搜索关键码以及相应的负载,此二叉树以如下形式构建:对于每一个内结点,小于该内结点的关键码位于该结点的左子树内;对于每一个内结点,大于该内结点的关键码位于该结点的右子树内。 注意二叉搜索树是不能含有重复元素的。原创 2016-12-31 18:54:41 · 462 阅读 · 0 评论 -
python数据结构学习笔记-2016-12-04-01-Morse电码
13.6 Morse电码 13.6.1 决策树 决策树(decision tree)是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。 我们使用决策树来实现Morse电码。 26个字母的Morse电码如下: 构建出来的二叉决策树如下:原创 2016-12-31 18:54:18 · 356 阅读 · 0 评论 -
python数据结构学习笔记-2016-12-03-01-堆排序
13.5 堆排序 堆排序(heapsort),该算法以一个未排序序列,创建堆,然后从中提取元素来,从而创建排序序列。 13.5.1 简单实现#-*-coding: utf-8-*-# 堆排序算法的简单实现from arrayheap import MaxHeapdef simpleHeapSort(theSeq): n = len(t原创 2016-12-31 18:53:41 · 290 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-30-01-堆
13.4 堆 堆(heap)是一个完全二叉树,其结点组织是基于各自结点的数据域。它有两个重要的变种——最大堆和最小堆。 最大堆(max-heap),具有称为堆序性质(heap order property)。对于其任意一个内结点而言,该结点处的值均大于其两个子结点的值。 最小堆(min-heap),则具有相反的堆序性质,对于其任意一个内结点而言原创 2016-12-31 18:52:55 · 430 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-28-01-表达式树
13.3 表达式树 算术表达式可以用二叉树的形式表示,称为表达式树(expression tree)。其操作符位于内结点,而操作数位于叶结点。表达式树可以用于对表达式本身求值,也可以将中序表达式转变成前序表达式或者后序表达式。 13.3.1 表达式树ADT 算术操作符可分为一元操作符(-a, a!)和二元操作符(a + b)。这里,先只原创 2016-12-31 18:52:22 · 1466 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-27-01-二叉树
13.2 二叉树(binary tree) 二叉树(binary tree)是每一个结点至多含有两个子结点的树结构。其中,对于含有两个子结点的结点,左边的子结点称为左子结点(left child node),相应的右边的称为右子结点(right child node)。 13.2.1 二叉树的性质 二叉树可以以不同形式和大小存在,其取决于结点的数目原创 2016-12-31 18:50:50 · 289 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-26-02-树结构
13.1 树结构 树结构(tree structure)是结点和边以层次结构形式组织起来的数据结构。 数据储存在结点中,每一对结点之前通过边相连。 根结点(root node) 树结构中处于最顶层上的结点称为根结点(root node)。它提供了访问树的唯一途径。任何一个非空树结构都含有一个根结点。原创 2016-12-31 18:50:14 · 292 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-26-01-链表排序
12.5 链表排序 12.5.1 插入排序 将原链表的每一个结点取出,放入到新的排序链表中。#-*-coding: utf-8-*-# 链表的插入排序def llistInsertionSort(origList): # 确保链表非空 if origList is None: return # 对原链表原创 2016-12-31 18:49:21 · 1516 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-24-02-基数排序
12.4 基数排序 基数排序(radix sort)是一种只适用于数字或字母类型的排序方法,它检查数字或字母的每一位,将之分类,按照位数的特定顺序,来将元素排列。 12.4.1 算法描述 以数字为例,将所有元素按照个位数字分类,分类好后,将个位数字大小排列组合起来,再按照十位数字分类,再按照数字大小排列组合起来,一直到最大数位为止。原创 2016-12-31 18:48:05 · 844 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-24-01-快速排序
12.2 快速排序 快速排序(quick sort)仍旧是采用分治法,该排序算法按照选定的主键(pivot key)将序列分成两部分。此外,该算法不需要使用临时数组。 12.2.1 算法描述 首先是选定第一个元素作为主键,将序列分成两部分,分别为L和G,L是小于主键的部分,G是大于主键的部分。其次,对L和G分别重复上述过程,一直到不能再分为止。原创 2016-12-31 18:47:27 · 429 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-05-04-抽象数据类型(四)
1.5 应用:学生记录 提取学生信息,产生相应的报告。 对于每一个学生,有五部分信息ID,以整数表示;姓名,以字符串表示;年级,以整数代号表示;GPA,以浮点数表示。 但是我们并不知道,这些学生的信息是怎么储存的,它们可能储存在纯文本文件中,在二进制文件中,甚至是在数据库中。 1.5原创 2016-10-05 18:23:56 · 356 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-05-03-抽象数据类型(三)
1.3 包(注意与python中的包区分) 本节以包为例子,继续阐述抽象数据类型。 包用于储存数据项的简单容器。具有如下性质访问其中的具体某个数据项;增删数据项;判断一个数据项是否在包内;遍历包内所有数据项。 1.3.1 包ADT 包这一ADT是用于储存数据项的容器,其中的数据项是可以原创 2016-10-05 17:29:43 · 678 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-14-02-python列表
2.2 python列表 python列表是一种可变的序列容器。本节主要讲python列表的实现,涉及C语言层面。 2.2.1 创建python列表 如下所示:>>> pyList = [4, 12, 2, 34, 17] 当python列表被创建时,一个数组被创建出来,以储存列表中的元素,并且这一数组的长度是大于列表的长度的。数原创 2016-10-14 23:35:33 · 463 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-05-02-优先级队列
8.3 优先级队列 8.3.1 优先级队列ADT 优先级队列:每次从队列中取出的应该是具有最高优先权的元素,这种队列称为优先级队列(priority queue)。 优先级队列根据优先级的有界与否,分为两种类型:有界优先级队列和无界优先级队列。 有界优先级队列(bounded priority queue)的优先权p在一定的范原创 2016-11-05 16:34:37 · 561 阅读 · 0 评论 -
python 里面的单下划线与双下划线的区别(私有和保护)
Python 用下划线作为变量前缀和后缀指定特殊变量。_xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”转载 2016-10-14 16:55:19 · 317 阅读 · 0 评论 -
python数据结构学习笔记-2016-11-05-01-队列ADT及其实现
8.1 队列ADT 队列(queue):只能在一端插入元素,在另一端删除元素的容器。其特点是先进先出(first-in first-out, FIFO)。 插入元素的一端称为后端(back),也称为队尾,删除元素德一端称为前端(front),也称为队头。 其具有如下属性:Queue():创建空队列;isEmpty():判断当前队列是否为空原创 2016-11-05 10:47:38 · 790 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-24-02-使用排序列表实现集合ADT
5.4 集合ADT 在之前使用列表实现的集合ADT中,使用线性搜索在未排序列表查找元素,这是非常低效的。本节使用排序列表来实现集合ADT#-*-coding: utf-8-*-# 使用已排序列表实现集合ADTclass MySet(object): def __init__(self): self._theElements = list()原创 2016-10-24 22:11:21 · 476 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-24-01-排序列表
5.3 排序列表 5.3.1 排序列表的保持 对于向一个已排序的列表中添加一个元素,要想保持列表仍然是排好序的,就必须找出该元素的准确插入位置,这其中就可以使用二分法来查找准确插入位置。#-*-coding: utf-8-*-# 利用二分法返回插入元素在排序序列中的正确插入位置def findSortedPosition(theList, target)原创 2016-10-24 21:07:46 · 312 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-23-02-排序
5.2 排序 排序(sorting)是将一系列数据进行重组的过程。 5.2.1 冒泡排序 冒泡排序(bubble sort),是对含n个元素的序列s进行n-1轮遍历(假定要进行升序排列),每一轮遍历,如果s[i] > s[i+1],那么交换两者的值,这样第一轮就可以确保最大的元素排在末尾,第二轮可以确定次大的元素可以排在倒数第二的位置,依次类推原创 2016-10-23 22:30:29 · 230 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-23-01-搜索
5.1 搜索 搜索(Searching)是基于特定标准从数据的集合中选出特定信息的过程。 序列搜索(sequence search)是通过使用特定的搜索关键字(search key)从序列中找出特定项。 关键字(key)是一个独一无二的值,它用于在序列中找出特定项。它可以是简单的数据类型,也可以是复杂的数据类型(复合关键字)。 5.1.原创 2016-10-23 21:37:17 · 218 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-22-02-评价集合ADT
集合ADT#-*-coding: utf-8-*-# 使用python列表实现集合ADTclass MySet(object): def __init__(self, *initElements): self._theElements = list(initElements) # 集合的基数 def __len__(self):原创 2016-10-22 10:38:52 · 284 阅读 · 0 评论 -
python数据结构学习笔记-2016-10-22-01-评价python列表
4.2 评价python列表 列表操作最坏情况v = list()O(1)v = [0] * nO(n)v[i] = xO(1)v.append(x)O(n)v.extend(w)O(n)v.insert(x)O(n)v.pop()O(n)原创 2016-10-22 09:20:42 · 286 阅读 · 0 评论