数据结构与算法 Python语言实现
偶尔也吃鸡
最怕一生碌碌无为,还安慰自己平凡可贵。
展开
-
Python实现单向链表
使用Python写链表之前需要明白Python里变量存储的本质:变量本身就是存储的一个地址,交换他们的值就是把自己的指向更改一下。基于这一点,链表里面涉及的指针问题便可以解决。单向链表:也叫单链表,是链表中最简单的一种,由一个个节点组成,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。节点实现:class...原创 2019-04-30 12:17:48 · 1205 阅读 · 0 评论 -
Python实现二分查找
二分查找二分查找又称折半查找,优点是比较次数少、查找速度快、平均性能好;其缺点是要求待查表为有序表,且插入删除困难,因此折半查找适用于不经常变动而查找频繁的有序序列。其算法思想是将表中中间位置记录的关键字与要查找的关键字比较,如果两者相等则查找成功,否则利用中间位置将表分成前、后两个子表。如果中间记录的关键字大于查找关键字,则进一步查找前一字表,否则进一步查找后一子表。重复以上过程,直到满足条...原创 2019-05-15 21:34:06 · 2453 阅读 · 0 评论 -
Python二叉树的实现与遍历
1. 二叉树在计算机科学中,二叉树是每个节点最多有两个子树的树结构,通常子树被称为左子树和右子树。2. 节点类一个节点对象包含数据和指向两个子节点的引用,数据代表要存储的内容。class Node(object): """节点""" def __init__(self, val): self.val = val self.lchil...原创 2019-05-16 11:11:08 · 1170 阅读 · 0 评论 -
Python排序算法之归并排序
归并排序归并排序是采用分治法的典型应用,分治法的思想就是先递归分解数组,再合并数组。将数组分解为最小之后再合并两个有效数组,其基本思路是比较两个数组最前面的数,谁小就先取谁,然后其指针就往后移一位,然后再比较,直到一个数组为空为止,最后把另一个数组剩余部分复制过来即可。算法实现# -*- coding: utf-8 -*-def merge_sort(array): "...原创 2019-05-15 20:51:42 · 1412 阅读 · 0 评论 -
Python排序算法——冒泡排序、选择排序、插入排序、希尔排序
一、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,一次比较两个元素,如果顺序错误就把它们交换过来。由于最大的元素经过交换会慢慢“浮”到数列的顶端,因此叫作冒泡排序。冒泡排序的算法运作流程:比较相邻的元素,如果第一个比第二个大,就交换他们两个。 对每组相邻元素做同样的操作,从开始第一对到结尾最后一对,最后的数会是最大的数。 对所有元素重复以上步骤,除了最后一个...原创 2019-05-15 15:46:27 · 1410 阅读 · 0 评论 -
Python排序算法之快速排序
快速排序快速排序(Quick sort),又称划分交叉排序,通过一趟排序将要排序的数据分割成独立的两部分。其中一部分所有的数据都要比另一部分所有的数据小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤从数列中挑出一个元素,称为“基准”。 重新排序数列,所有元素比基准小的在元素左边,比基准大的在右边。该基准就处于数列中间位置,...原创 2019-05-14 20:38:47 · 1263 阅读 · 0 评论 -
Python实现队列
队列队列(queue)是只允许在一端进行插入操作,另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称(FIFO)。允许插入的一端为队尾,允许删除的一端为队头,不允许在中间部分进行操作。常用操作 enqueue(item):入队。 dequeue():出队。 is_empty():判空。 size():返回...原创 2019-05-13 20:47:34 · 1216 阅读 · 0 评论 -
Python利用列表实现栈
栈:栈(stack),也称为堆栈,是一种容器。可存入数据、访问元素、删除元素,它的特点是只允许在容器的一端(top)进行数据添加(push)和数据输出(pop)操作。没有位置概念,保证了任何时候操作的元素都是最后一次存入的元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行数据操作,因而按照后进先出(LIFO,Last In First Out)的原理运行。注:列表或者链表...原创 2019-05-13 17:43:15 · 1869 阅读 · 0 评论 -
Python实现单向循环链表
单向循环链表:单向循环链表相对于单链表,区别在于链表中最后一个节点的next区域不在指向None,而是指向链表的头节点。常用操作:is_empty() :判断链表是否为空,空则返回True,否则返回False。 length(): 返回链表的长度。 print():遍历链表并打印其中的元素。 add(item):往链表头部添加元素。 append(item):往链表尾部添加元素...原创 2019-05-13 16:43:15 · 1685 阅读 · 0 评论 -
Python实现双向链表
双向链表:比单链表复杂一点的就是双向链表,也是由一个个节点组成。每个节点有两个链接,一个指向前一个节点,当此节点为第一个节点时,指向None;另一个指向后一个节点,当此节点为最后一个节点时,指向None。节点实现:class Node(object): """节点""" def __init__(self, val=None): self.val = ...原创 2019-05-13 10:45:10 · 1284 阅读 · 0 评论 -
二叉树及其四种遍历的实现
前言:在数据的组织中,树结构的确是一个突破,因为我们用它实现的一系列算法比使用线性结构要快得多,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 本文介绍如何使用Python实现二叉树的层次遍历、先序遍历、中序遍历以及后序遍历。概念:层次遍历(广度优先遍历):把节点的兄弟节点先搜索完了再往孩子节点搜索。 先序遍历...原创 2019-08-31 21:17:44 · 420 阅读 · 1 评论