数据结构
jionlp数据分析
JioNLP 开源软件作者,数据分析专家
展开
-
去掉字符串当中的连续k个0,Python版
题目: 给定字符串str 和一个整数k。如果str中恰好出现了连续的k个0,则将k个0删除。 比如,给定字符串str = “0000fw300001203h000ui0000re3_0000”,k=4。返回的结果为“fw31203h000uire3_”。代码:class StringAlgorithm(object): def __init__(self): pass原创 2017-11-07 21:56:10 · 2020 阅读 · 2 评论 -
【数据结构】串、KMP 算法 Python 版
一、串:串就是字符串,本质上就是线性结构,其中可以存放各种字符,是线性表的一个具体表现形式。二、串表示法:串的表示方法主要有顺序存储,包括预定长度的串(定长顺序表示)和可变长度的串(堆分配存储);还有链表表示方法,包括存储结点大小为1的表示,还有每一个链表结点存储k个字符的链表表示。链表表示法中,如果每一个结点存放一个字符的话,存储密度比较低,但是运算操作效率比较高;反之,每个节点都存储k个字符的原创 2017-12-04 21:54:18 · 2071 阅读 · 1 评论 -
【数据结构】树与二叉树 基础要点+二叉树 Python 实现
这篇文章挺简单的,就是数据结构中树和二叉树的一些理论要点。因为怕自己遗忘的太快,所以写出来加深记忆。读我的blog的话,要是从头学的话不建议看了,当做复习大纲还ok。1、树的数据结构定义D是具有相同特性的数据元素的集合。若D为空集,则称为空树。 若D仅含有一个元素,则R为空集,否则R={H},H是如下二元关系: (1)D中存在唯一的root元素,在H关系下无前驱; (2)若D除去root元素之原创 2017-10-05 17:06:17 · 740 阅读 · 0 评论 -
环形单链表的约瑟夫问题 Python版
题目: 一个环形单链表,从头结点开始向后,指针每移动一个结点,就计数加1,当数到第m个节点时,就把该结点删除,然后继续从下一个节点开始从1计数,循环往复,直到环形单链表中只剩下了一个结点,返回该结点。这个问题就是著名的约瑟夫问题。代码: 首先给出环形单链表的数据结构:class Node(object): def __init__(self, value, next=0):原创 2017-12-05 11:07:07 · 1928 阅读 · 0 评论 -
【数据结构】内部排序算法
我总结了一下常见的排序算法。直接写成了类,对于每一种算法的说明都写在了注释里,在调用某个类或者某个排序算法的方法之后,使用python内置的 __doc__方法即可查看具体的某种算法的说明。class SortingAlgorithms(object): ''' 冒泡法:对比模型,原数组上排序,稳定,慢o(n^2) 插入法:对比模型,原数组上排序,稳定,慢,最优的方法是希尔排原创 2017-11-25 21:07:08 · 441 阅读 · 0 评论 -
【数据结构】动态内存管理
动态内存管理是和操作系统息息相关的一个活动,现在的计算机的内存分配和回收基本上都由OS来维护管理,但是一些高级程序语言的内存回收和分配都还是由程序员来管理,比如C和C++,有malloc方法,也总有构造函数和析构函数。但是有一些语言就不需要,比如Python。系统每次对申请内存的对象分配一段地址连续的内存块,如果已经被占用了,就叫做占用块,如果还没被分配掉,就叫做可利用空间块或者空闲块。在回收内存之原创 2017-11-26 19:51:59 · 804 阅读 · 0 评论 -
【数据结构】查找算法 Python 版
我自己写了一个 Python 类,里面放了各种查找算法的代码,并且总结了所有常见的查找算法的基本思想、特点、适用情况等等。通过 __doc__ 方法可以查看代码里的说明和介绍。写代码的时候参考了[Data Structure & Algorithm] 七大查找算法。这个作者用的是C++,但是我看他的代码里面基本没有使用什么C++的特性,也很好懂。我就照着书上的写了个Python的。引用的这个 blo原创 2017-11-26 19:59:39 · 512 阅读 · 0 评论 -
构造一个特殊栈,实现方法getmin,返回栈中的最小元素 Python版
题目: 构造一个栈结构,其中需要实现一个方法,该方法 getmin,返回栈中的最小的元素。要求: 时间复杂度为o(1)。分析: 之前我写过了用python写一个栈数据结构,代码在这里: 队列和栈的Python实现在这里,需要以时间复杂度 o(1)完成查找,也就是说,必须以空间换时间。因此,构造一个栈,这个栈的栈顶必须保持始终都是原始栈的最小值。在原始栈插入和弹出元素时,这个辅助栈必须跟着配合原创 2017-12-22 23:22:13 · 1057 阅读 · 0 评论 -
将单向链表按某个值划分成左边小、中间相等、右边大的形式 Python 版
题目:给定一个单向链表,如 LinkedList [21, 5, 120, 19, 72, 50, 312]。 再给定任意一个数值,比如50,返回一个链表,保证左边小、中间相等、右边大的形式,比如该例子的返回链表结果为:[21, 5, 19, 50, 120, 72, 312]再比如给定值100,返回的链表结果为:[21, 5, 19, 72, 50, 120, 312] 且需要保证修改后的原创 2017-12-06 23:06:03 · 1343 阅读 · 2 评论 -
在单链表中删除倒数第K个节点 Python 版
题目: 给定一个链表,删除其中倒数第k个结点。代码:class LinkedListAlgorithms(object): def __init__(self): pass def rm_last_kth_node(self, k, linked_list): # 删除倒数第 K 个节点,针对单链表的 if linked_list.is_empty(原创 2017-11-23 21:32:06 · 1222 阅读 · 0 评论 -
【数据结构】线性表 Python 实现
今天看了一下数据结构的书,发现其实数据结构没有几种,线性表,数组,字符串,队列和栈,等等,其实是一回事,然后就是树结构,图结构。数据结构的理论并不难,主要是要自己写一下这些数据结构以及对应的基本的操作方法,这样就能够更快的提高。这一篇blog写一下线性表。线性表:分为顺序表和链表一、顺序表 顺序表就是相对于表中的数据,地址也是顺序的,所以可以随机存取。但是在操作插入和删除元素的时候,由于要满足地址原创 2017-11-23 20:59:13 · 4625 阅读 · 1 评论 -
判断两个字符串是否互为旋转词 Python版
题目 如果将一个 str1 从任意的位置切分开,分成两部分,将后面一部分放置在前面, 再组合起来成为 str2,构成了旋转词。 例如:str1 = “apple”,str2 = “leapp”,两个词就是旋转词。代码 def is_rotation(str1, str2): if str1 == "" or str2 == "" or len(str1) != len(st原创 2017-11-09 20:59:02 · 2003 阅读 · 1 评论 -
判断两字符串是否互为变形词Python版
题目: 给定两个字符串,str1,str2,判断两个字符串中出现的字符是否全部种类一样,数量一样。 例如: str1 = “apple”, str2 = “paple”, 返回 True; str1 = “pear”, str2 = “bears”, 返回 False。Python版代码如下,我自己手写:def is_deformation(str1, str2): if str1原创 2017-11-02 22:36:16 · 2489 阅读 · 1 评论 -
计算字符串中所有数字之和Python版
题目: 给定一个字符串,计算其中所有数字的和。其中,不考虑小数点,如果有奇数个“-”号,则数字为负,偶数个则数字为正。 例如,“a12b3mnh4”, 返回值19, “-2fds—-43fnd”,返回值41。代码:class String(object): def __init__(self): pass def sum_of_num(self, str):原创 2017-11-04 00:44:55 · 7769 阅读 · 0 评论 -
【数据结构】队列和栈 Python 实现
队列和栈都是一种特殊的线性表,所以也各有顺序表和链表两种表示方法。队列是先进先出,链表要优于顺序表,毕竟如果是顺序表的话,要不停地修改地址。应用主要包括银行业务模型,生产模型。栈是后进先出。其表示方法我认为顺序表要优于链表。应用主要有数制转换,括号匹配,行编辑程序,迷宫求解,表达式求值,汉诺塔。队列的Python版本数据结构如下:# -*- coding=utf-8 -*-class Nod原创 2017-11-23 21:07:03 · 1950 阅读 · 1 评论 -
判断一个链表是否是回文结构 Python 版
题目: 判断一个链表是否是回文结构,如果是返回 True,否则返回 False 比如,给出一个链表为[2, 5, 12, 198, 12, 5, 2],返回 True, 给定链表[2, 5, 12, 198, 12, 54, 20],返回 False。方法1:空间复杂度为 o(n),使用一个栈,将链表中的数据全部push 到栈里,然后再迭代一遍链表,取出栈里的值逐个相互比较,如果不一样则说明不原创 2017-11-29 23:59:29 · 3090 阅读 · 0 评论 -
【数据结构】外部排序总结 + 构建败者树 Python 版
外部排序又称大数据文件排序。我看了教材之后,依然对外部排序有些模棱两可的误解,搜了一些资料才发现问题出在哪里。一、多路平衡归并排序:外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并。比如,要对 900 MB 的数据进行排序,但机器上只有 100 M原创 2017-12-08 22:55:45 · 2222 阅读 · 0 评论 -
求数组中两个字符串的最小距离 Python 版
题目:给定一个数组 strs,其中的数据都是字符串,给定两个字符串 str1,str2。如果这两个字符串都在 strs数组中,就返回它们之间的最小距离;如果其中任何一个不在里面,则返回 -1;如果两个字符串相等,则返回 0。例如:给定[‘*’,’3’,’*’,’5’,’10’,’9’,’7’,’1’,’*’],再给定两个字符串’* ‘和’9’,通过函数求得返回值 3。分析:有两种方法, 方法1原创 2017-12-11 13:04:10 · 7642 阅读 · 2 评论 -
括号字符串的相关问题 Python 版
题目:1、给定一个字符串,判断这个字符串是不是有效的括号字符串,也就是满足数学算式可算性。比如,str=”(()(())())”,返回 True,给定str = “(()((())(())”,返回False。如果括号字符串中掺杂了其它的字符,则返回False 2、给定一个括号字符串,找出其中最大的子串长度,比如:给定str = “(()((())(())”,返回 8。分析:对于问题一:有两种方原创 2017-12-11 17:25:17 · 1708 阅读 · 2 评论 -
【数据结构与算法】刷题汇总 Python 版
我的BLOG里写了一部分算法和数据结构,题目都是从网上和书上找的。当然一下这些并不全面,我打算利用今后的时间把各类的算法题都用Python写一遍(因为我主要是用Python),尽可能囊括所有的算法题。写这些题并不是目的,主要还是为了能够提升自己的数据结构和算法的水平,以及码代码的速度和熟练度。所有的代码都提交到了我的 github 上面:冬日新雨的github:数据结构和算法刷题代码下载1、字符串:原创 2017-12-11 17:45:02 · 20151 阅读 · 2 评论