Python实现数据结构
文章平均质量分 57
Python是AI的第一语言,而数据结构是算法设计的基础。本专栏将首先用python实现基本数据结构:栈,队列,链表,树等,然后结合剑指offer的相关笔试题,延伸到数据结构更多的操作和实践中去,希望本专栏能助你编程学习之路一臂之力。
海晨威
Growth is a song
展开
-
python实现统一形式的二叉树前中后序非递归遍历
对于二叉树的遍历,递归形式非常简单,可以很快写出来,而对于非递归的形式,在不熟的情况下,还是需要一番思考的,因为二叉树的非递归遍历并没有一个统一的形式方便理解和记忆,对于前序和中序非递归遍历,还算统一,而一般的非递归后序遍历,和前两者有很大的差异。参考python实现二叉树和它的七种遍历,给出一般形式的非递归前中后序遍历:一般形式的非递归前中后序遍历 def front_stack(self...原创 2018-12-31 11:36:36 · 1179 阅读 · 0 评论 -
数组中的逆序对—Python非归并解法
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。该问题的最好解法是类似归并排序的解法,时间复杂度为O(nlogn),网上相关介绍博客也很多,这里给出一个非归并解法,复杂度会高一点,但想法非常巧妙,代码非常简易。以一个例子来说明:输入数组:data=[3,2,1,5,4,6,0,7]排序好数组:data...原创 2018-09-01 10:37:24 · 1172 阅读 · 2 评论 -
Python实现二叉树的层次遍历及按层输出的两种方法
二叉树的层次遍历二叉树的层次遍历即从上往下、从左至右依次打印树的节点。 其思路就是将二叉树的节点加入队列,出队的同时将其非空左右孩子依次入队,出对到队列为空即完成遍历。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.lef...原创 2018-08-15 16:40:24 · 21309 阅读 · 5 评论 -
Python剑指offer之已知前序中序求后序遍历
详细清晰的思路介绍可以参见博客:已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历下面给出题目和python实现代码: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。重建二叉树这里就以 后序遍...原创 2018-04-28 19:46:53 · 5478 阅读 · 0 评论 -
Python剑指offer之链表中倒数第k个结点-四种思路
题目要求:输入一个链表,输出该链表中倒数第k个结点。思路:取两个指针,第一个先走,到了第k个节点,然后两个指针一起走,当第一个到了末尾时,第二个就到了倒数第k个了。这个思路复杂度最低将节点压入栈中,再弹出第k个翻转链表,取第k个计算链表总节点个数n,再取第n-k个这里要注意输入k大于链表总长度和小于1的情况思路1代码:class Solution: def...原创 2018-04-27 20:24:21 · 534 阅读 · 0 评论 -
Python剑指offer之反转链表-图解
输入一个链表,输出反转后的链表。 剑指offer中的Python解法:# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHea...原创 2018-03-01 19:52:08 · 11586 阅读 · 0 评论 -
Python剑指offer之两个栈实现一个队列-两个队列实现一个栈
栈与队列之间的相互实现,是面试中的经典试题。两个栈实现一个队列入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的元素 pop 出来并 push 进栈B,再栈B出栈,如不为空则栈B直接出栈复杂度分析:这样用两个栈实现一个队列,入队的复杂度为O(1),出队的复杂度则变为O(n)。而直接用 python 的单个列表实现队列,以列表首作为队列尾,则入队用insert,复...原创 2018-02-22 16:19:14 · 10770 阅读 · 4 评论 -
链表的Python实现与实例分析
链表(Linked List),是一种在逻辑上连续,但在物理存储单元上不一定连续的线性存储结构。包括存储数据元素的数据域和存储下一个节点地址的指针域。在存储结构中,有顺序存储的数组(Array List),为什么还要链表呢?因为在有些情况下,Linked List相对Array List是有优势的你的应用不会随机访问数据。因为如果你需要Linked List中的第n个元素的时候,你需要从...原创 2018-02-23 22:59:39 · 3581 阅读 · 0 评论 -
队列的Python实现与实例分析
队列是只有一端可以进行插入操作,而另一端可以进行删除操作的有序线性存储结构,满足先进先出的约束。生活中典型的实例就是排队,先到的人排在前面,可先得到服务,后到的人排在后面,并且不能插队。计算机应用中典型的实例就是打印机,先发送的打印任务可以先被执行,之后的都要排队等候Python实现在 Python 中,和栈一样,同样可以用列表作为队列的底层实现,只需要确定列表的哪一端作为队列...原创 2018-02-21 22:29:48 · 6318 阅读 · 0 评论 -
栈的Python实现与实例分析
栈是限定只有一端可以进行插入和删除操作的有序线性存储结构,满足先进后出的约束。生活中典型的实例就是一叠盘子,一般都只是在最上面放置或者拿掉盘子。计算机中典型的实例就是浏览器的返回操作,你访问的网页地址实际被存放在一个栈中,栈顶是你最近访问的那个Python实现在 Python 中,因为列表的有序机制和自有的一组方法,可以很好的作为栈的底层实现,只需要确定列表的哪一端作为栈的可操...原创 2018-02-21 14:25:14 · 1351 阅读 · 0 评论 -
python实现数据结构的基础
数据结构是计算机存储、组织数据的方式。不同语言只是数据结构实现的不同工具,但本质是一样的。Python的强大之处在于其自带的数据结构:列表 list,元组 tuple,字典 dict 等,都非常的强大,尤其是列表,在它们的基础上可以方便快捷的实现常用的数据结构:栈,队列,链表,树等,而没有必要重复造轮子。栈和队列栈,是一种仅允许在表的一端进行插入和删除运算的受限线性表,满足后进先出...原创 2018-02-20 22:11:01 · 1533 阅读 · 0 评论 -
二分查找的循环和递归Python实现
二分查找的前提是数组或列表有序,下面以升序列表为例,key为要查找的关键字,查找成功返回下标,不成功返回None,给出循环和递归实现。循环实现:def HalfSearch(OrderedList, key, left, right): while left <= right: mid = (left + right) // 2 if ke...原创 2018-05-11 16:47:01 · 3875 阅读 · 4 评论