- 博客(138)
- 收藏
- 关注
原创 python数据结构学习笔记-2016-11-09-01-文本编辑器
9.5 应用:文本编辑器 本节将多重链表应用于编辑缓冲ADT(Edit Buffer ADT)。 9.5.1 编辑操作 布局 通常将文本以行和列的形式组织起来。每一行有无限的长度,每一行的大小可能不同,但末尾都有换行符。一个空的文本,只有一行空行以及一个换行符。 文本光标 文本光标由行号以及
2016-11-09 20:56:51 946 1
原创 python数据结构学习笔记-2016-11-07-03-多重链表以及相应的迭代器
9.3 多重链表 多重链表(multi-linked list):每一个结点都含有多个指针,之前的双链表就是多重链表。 9.3.1 多条链 下图就是多重链表的一个例子:# 多重链表的结点class StudentMListNode(object): def __init__(self, data): se
2016-11-07 22:52:17 644
原创 python数据结构学习笔记-2016-11-07-02-环形链表
9.2 环形链表 环形链表(circlar linked list)将所有结点组织成环形。与单链表不同的是,最后一个结点的next指针指向首元结点。(首元结点的prev指针指向最后一个结点。) 通常情况下,可以使用一个外部指针指向最后一个结点,方便向前遍历或者向后遍历。# 遍历def traverse(listRef):
2016-11-07 21:33:52 353
原创 python数据结构学习笔记-2016-11-07-01-双链表
9.1 双链表 双链表(doubly link list):与之前的单链表不同的是,每一个结点有两个指针,一个指向下一个结点,另外一个指向上一个结点。 双链表中有两个指针,分别为头指针和尾指针,分别指向第一个结点和最后一个结点。 双链表的操作 遍历 双链表可以允许向前遍历,也可以向后遍历。
2016-11-07 20:34:33 333
原创 python数据结构学习笔记-2016-11-05-03-计算机仿真
8.4 应用:计算机仿真 8.4.1 航空公司票务柜台 本节对航空公司票务柜台进行仿真模拟。 队列系统建模 我们通过离散时间仿真来建模,这个仿真是一系列能显著改变系统的事件。它由时间驱动,并运行给定的时间。用户可以使用一些参数来设定系统。在这里,这些参数是系统运行的时长;柜台数量;完成一次交易的时间;顾客到来的时间分
2016-11-05 18:22:15 419
原创 python数据结构学习笔记-2016-11-05-02-优先级队列
8.3 优先级队列 8.3.1 优先级队列ADT 优先级队列:每次从队列中取出的应该是具有最高优先权的元素,这种队列称为优先级队列(priority queue)。 优先级队列根据优先级的有界与否,分为两种类型:有界优先级队列和无界优先级队列。 有界优先级队列(bounded priority queue)的优先权p在一定的范
2016-11-05 16:34:37 593
原创 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 838
原创 python数据结构学习笔记-2016-11-02-02-迷宫问题
7.4 迷宫问题 7.4.1 回溯 蛮力法(brute-force method):穷举所有可能,一一验证。这种方法效率较低。 回溯法(backtracking):通过部分返回来排除解决问题可能途径进而找出正确途径的过程,例如说解决迷宫问题就可以用回溯法。相应的算法称为回溯算法。 7.4.2 设计解决方案 问
2016-11-02 22:01:52 4234
原创 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 397
原创 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 1062
原创 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 1063
原创 python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
6.5 使用链表实现稀疏矩阵 6.5.1 实现 使用一个数组来储存稀疏矩阵的行,数组的一个元素指向稀疏矩阵的每一行,而每一行的非零元素以链表表示。所以每一个结点只需储存列号和相应的数值即可。#-*-coding: utf-8-*-# 使用排序链表的数组来实现稀疏矩阵from myarray import Arrayclass Spar
2016-10-28 23:15:46 848
原创 python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表
6.4.1 带尾指针的链表 在单链表的末尾,加上一个指针用于指向链表的最后一个结点。 追插元素(append) 在链表的最后一个结点,增加新的结点,如果使用尾指针的话,较为便利。只需将尾指针指向新结点,并将原来最后一个结点指向新结点即可。def append(head, tail, item): newNode = ListNode
2016-10-28 22:14:26 636
原创 python数据结构学习笔记-2016-10-27-02-使用单链表实现包ADT
6.3 使用单链表实现包ADT 6.3.1 实现#-*-coding: utf-8-*-# 使用单链表实现包ADTclass Bag(object): def __init__(self): self._head = None # 底层单链表头指针 self._size = 0 # 追踪单链表长度 def __len__
2016-10-27 22:46:09 583
原创 python数据结构学习笔记-2016-10-27-01-链表
6.1 简介 结点(node):包含数据以及至少一个指向另一个结点的指针。 链式结构(linked structure):包含结点的容器。 链表(linked list):每个结点一个接一个串联起来的链式结构。 头结点:指向链表第一个结点(首元结点)的结点,其数据域不储存链表,其指针称为头指针(head pointer)。
2016-10-27 22:30:24 465
原创 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 494
原创 python数据结构学习笔记-2016-10-24-01-排序列表
5.3 排序列表 5.3.1 排序列表的保持 对于向一个已排序的列表中添加一个元素,要想保持列表仍然是排好序的,就必须找出该元素的准确插入位置,这其中就可以使用二分法来查找准确插入位置。#-*-coding: utf-8-*-# 利用二分法返回插入元素在排序序列中的正确插入位置def findSortedPosition(theList, target)
2016-10-24 21:07:46 319
原创 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 243
原创 python数据结构学习笔记-2016-10-23-01-搜索
5.1 搜索 搜索(Searching)是基于特定标准从数据的集合中选出特定信息的过程。 序列搜索(sequence search)是通过使用特定的搜索关键字(search key)从序列中找出特定项。 关键字(key)是一个独一无二的值,它用于在序列中找出特定项。它可以是简单的数据类型,也可以是复杂的数据类型(复合关键字)。 5.1.
2016-10-23 21:37:17 230
原创 python数据结构学习笔记-2016-10-22-03-稀疏矩阵
4.5 应用:稀疏矩阵 稀疏矩阵(Sparse Matrix):一个矩阵中大部分元素都是零元素的矩阵(m × n),即其非零元素个数k 与稀疏矩阵相反的是稠密矩阵。 如果采用二维数组来实现稀疏矩阵,就意味着大部分的内存都会用来储存零元素,这就会造成内存的极大浪费,相关操作也会变得低效(?)。 基于此,本节来考虑使用pytho
2016-10-22 13:38:02 1509
原创 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 294
原创 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 292
原创 python数据结构学习笔记-2016-10-21-01-复杂度分析
程序执行时间取决于以下几个因素:数据量;硬件类型和执行时刻,关于执行时刻,按书中说是是否有其他程序在同时运行;编程语言和编译器也是一大关键因素。 4.1 复杂度分析 评价一个算法的效率,可以数逻辑比较、数据交换以及算术运算的数目。 比如说计算n×n矩阵的所有数值之和。>>> totalSum = 0>>> for i in
2016-10-21 19:39:51 857
原创 python数据结构学习笔记-2016-10-17-03-多维数组
3.3 多维数组 3.3.1 多维数组ADT 多维数组包含了一组通过多个维度组织起来的数据。相应的索引是元组(i1, i2, ..., in)。MultiArray(d1, d2, .., dn):创建多维数组,并将所有值初始化为None,注意要传入可变参数 。维度最高从d1开始,一直到dn;dims():返回维度数;clear(value):将多维
2016-10-17 22:26:49 1355
原创 python数据结构学习笔记-2016-10-17-02-映射
python当中的字典类型就是映射,本节主要实现映射这一ADT。 3.2.1 映射ADT 映射是通过关联唯一的键来储存数据记录的容器。这些键组件必须可以相互比较(不能相互比较,怎么显示唯一性)。具有如下方法:Map():创建映射;length():返回映射中键值对数目;contains(key):判断映射中是否存在给定键;add(key, value):
2016-10-17 20:52:52 401
原创 python数据结构学习笔记-2016-10-17-01-集合
集合是储存不重复事物的容器。 3.1 集合ADT 集合具有无重复元素,无序等特点。其具有方法:Set():创建空集合;length():返回集合的基数,可使用len()函数;contains(element):判断给定元素是否在集合中;add(element):向集合添加一个元素;remove(element):删去集合中的一个元素,若元素不存在,则
2016-10-17 20:24:44 276
原创 python数据结构学习笔记-2016-10-15-02-生命游戏
2.5 生命游戏 生命游戏由英国数学及John H.Conway设计,是一个零人游戏。 2.5.1 游戏规则 这个游戏使用一张无限大的直角坐标网格,每一个网格可以由一个细胞占据,当一个网格被细胞占据,称为活的(alive),而空网格被称为死的(dead),也可以以活细胞和死细胞称呼。 游戏的每一轮称为一代(generation
2016-10-15 11:57:51 2699
原创 python数据结构学习笔记-2016-10-15-01-矩阵ADT
2.4 矩阵ADT 矩阵是一个大小为m×n的数值表,包含如下方法:Matrix(rows, cols):创建一个rows×cols的矩阵,并将其内所有数值初始化为0;numRows():返回矩阵的行数;numCols():返回矩阵的列数;getitem(row, col):返回row行col列的数值;setitem(row, col, scalar):将row行col列
2016-10-15 10:11:52 765
原创 python数据结构学习笔记-2016-10-14-03-二维数组
2.3 二维数组 二维数组(two-dimensional array):将数据按行和列组织,类似于表格和网格。 2.3.1 二维数组ADT 二维数组ADT包含的方法与一维数组的有些类似:Array2D(nrows, ncols):创建二维数组,行数和列数分别是nrows和ncols,并将所有元素初始化为None;numRows()
2016-10-15 00:21:52 986
原创 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 495
原创 python数据结构学习笔记-2016-10-14-01-一维数组
2.1 数组结构 一维数组(one-dimensional array)是多个元素按照一定的顺序,储存在内存的连续的字节当中,并允许对每一个元素的任意访问。 对数组中元素的访问,是通过指针来完成。(类似于数学中的下标) 2.1.1 为什么学习数组 数组与python中列表的区别:数组的相关操作较少,而列表的操作较多
2016-10-14 21:22:05 3850
转载 python 里面的单下划线与双下划线的区别(私有和保护)
Python 用下划线作为变量前缀和后缀指定特殊变量。_xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”
2016-10-14 16:55:19 333
原创 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 352
原创 python数据结构学习笔记-2016-10-05-04-抽象数据类型(四)
1.5 应用:学生记录 提取学生信息,产生相应的报告。 对于每一个学生,有五部分信息ID,以整数表示;姓名,以字符串表示;年级,以整数代号表示;GPA,以浮点数表示。 但是我们并不知道,这些学生的信息是怎么储存的,它们可能储存在纯文本文件中,在二进制文件中,甚至是在数据库中。 1.5
2016-10-05 18:23:56 369
原创 python数据结构学习笔记-2016-10-05-03-抽象数据类型(三)
1.3 包(注意与python中的包区分) 本节以包为例子,继续阐述抽象数据类型。 包用于储存数据项的简单容器。具有如下性质访问其中的具体某个数据项;增删数据项;判断一个数据项是否在包内;遍历包内所有数据项。 1.3.1 包ADT 包这一ADT是用于储存数据项的容器,其中的数据项是可以
2016-10-05 17:29:43 696
原创 python数据结构学习笔记-2016-10-05-02-抽象数据类型(二)
1.2 日期抽象数据类型 本节以日期为例,阐述抽象数据类型。 1.2.1 定义ADTDate(month, day, year):根据给定的公历日期,创建日期实例,公元前的年份以负数表示;day():返回公历日期的某日;month():返回公历日期的某月(数字);year():返回公历日期的某年;monthName():返回公历日期的某月的月份名;d
2016-10-05 12:06:01 651
原创 python数据结构学习笔记-2016-10-05-01-抽象数据类型(一)
python数据结构以Data Structure and Algorithms Using Python为书本。 算法(Algorithm):为在有限时间内解决某个问题的一系列清晰精确的、按顺序执行的指令集。 1.1 简介 数据项(Data items):在计算机中以一系列二进制数字表示。 类型(type):一系列值的集
2016-10-05 00:37:39 2006 1
原创 python核心编程学习笔记-2016-10-01-01-客户端COM编程
23.1#-*-coding: utf-8-*-from time import ctimefrom urllib import urlopenticks = ('YHOO', 'GOOG', 'EBAY', 'AMZN')URL = 'http://quote.yahoo.com/d/quotes.csv?s=%s&f=sl1c1p2' # f=sl1c1p2中的s、l1、c1和
2016-10-01 11:30:34 1214 1
原创 python核心编程学习笔记-2016-09-25-01-python扩展
22.1 引言/动机 22.1.1 什么是扩展 扩展:所有能被整合或导入到其他python脚本的代码,都可以称为扩展。e.g. 纯python、C/C++、Java、C#或Visual Basic.NET都可以 22.1.2 为什么要扩展python添加/额外的(非python)功能性能瓶颈的效率提升——把软件开发过程中的瓶颈
2016-09-25 16:28:51 584
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人