随笔分类 -  数据结构与算法

用编程语言实现一些常用的数据结构和算法
摘要:Python实现八大排序算法,具体内容如下 1、插入排序描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素, 阅读全文
posted @ 2019-10-07 20:21 百家齐鸣 阅读(579) 评论(0) 推荐(0)
摘要:本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法)。分享给大家供大家参考,具体如下: 运行结果: 阅读全文
posted @ 2019-10-07 16:47 百家齐鸣 阅读(1061) 评论(0) 推荐(0)
摘要:本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法。分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 每次循环从队列弹出一个结点 将该节点的所有相连结点放入队列,并标记已被发现 通过队列,将迷宫路口所 阅读全文
posted @ 2019-10-07 16:44 百家齐鸣 阅读(358) 评论(0) 推荐(0)
摘要:本文实例讲述了python数据结构之图深度优先和广度优先用法。分享给大家供大家参考。具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而 阅读全文
posted @ 2019-10-07 16:39 百家齐鸣 阅读(438) 评论(0) 推荐(0)
摘要:本文实例讲述了python数据结构之图的实现方法。分享给大家供大家参考。具体如下: 下面简要的介绍下: 比如有这么一张图: A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C 可以用字典和列表来构建 找到一条路径: 找到所有路径: 找到最短 阅读全文
posted @ 2019-10-07 16:36 百家齐鸣 阅读(858) 评论(0) 推荐(0)
摘要:一、概述 快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition element,有时又称为pivot);接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时 阅读全文
posted @ 2019-10-06 23:28 百家齐鸣 阅读(319) 评论(0) 推荐(0)
摘要:一、顺序搜索 顺序搜索 是最简单直观的搜索方法:从列表开头到末尾,逐个比较待搜索项与列表中的项,直到找到目标项(搜索成功)或者 超出搜索范围 (搜索失败)。 根据列表中的项是否按顺序排列,可以将列表分为 无序列表 和 有序列表。对于 无序列表,超出搜索范围 是指越过列表的末尾;对于 有序列表,超过搜 阅读全文
posted @ 2019-10-06 23:06 百家齐鸣 阅读(272) 评论(0) 推荐(0)
摘要:一、概述 链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接。根据结构的不同,链表可以分为单向链表、单向循环链表、双向链表、双向循环链表等。其中,单向链表和单向循环链表的结构如下图所示: 二、ADT 这里只考虑单向循环链表ADT, 阅读全文
posted @ 2019-10-06 22:50 百家齐鸣 阅读(979) 评论(0) 推荐(0)
摘要:一、概述 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构。双端队列也拥有两端:队首(front)、队尾(rear),但与队列不同的是,插入操作在两端(队首和队尾)都可以进行,删除操作也一样。 二、ADT 双端队列ADT(抽象数据类型)一般提供以下 阅读全文
posted @ 2019-10-06 22:41 百家齐鸣 阅读(503) 评论(0) 推荐(0)
摘要:本文实例讲述了Python实现的数据结构与算法之队列。分享给大家供大家参考。具体分析如下: 一、概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行。 二、ADT 队列ADT(抽象数据类型)一般提供以下接口: ① Queu 阅读全文
posted @ 2019-10-06 15:25 百家齐鸣 阅读(255) 评论(0) 推荐(0)
摘要:遍历方案 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: 1).访问结点本身(N) 2).遍历该结点的左子树(L) 3).遍历该结点的右子树(R) 有次序: NLR、LNR、LRN 遍历的命名 根据访问结点操作发生 阅读全文
posted @ 2019-10-05 17:45 百家齐鸣 阅读(399) 评论(0) 推荐(0)
摘要:先建立二叉树节点,有一个data数据域,left,right 两个指针域 建立树: 手动建立二叉树 然后会生成下面的二叉树 除了 手动一个个的制定 node 节点,还可以创建一个 create 方法,接受用户输入添加二叉树节点。。。使用前续方式添加 ,代码如下: 使用create创建二叉树 通过 c 阅读全文
posted @ 2019-10-05 17:24 百家齐鸣 阅读(4665) 评论(0) 推荐(0)
摘要:一、树的定义 树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并具有层次关系的结构。它非常类似于自然界中的树。树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个特定的称为根(Root)的结点;(2)其余的结点可分为m(m 阅读全文
posted @ 2019-10-05 16:53 百家齐鸣 阅读(428) 评论(0) 推荐(0)
摘要:python双向链表和单链表类似,只不过是增加了一个指向前面一个元素的指针,下面的代码实例了python双向链表的方法 示意图: python双向链表实现代码: 输出: 5644056 阅读全文
posted @ 2019-10-05 16:31 百家齐鸣 阅读(244) 评论(0) 推荐(0)
摘要:链表由一系列不必在内存中相连的结构构成,这些对象按线性顺序排序。每个结构含有表元素和指向后继元素的指针。最后一个单元的指针指向NULL。为了方便链表的删除与插入操作,可以为链表添加一个表头。 删除操作可以通过修改一个指针来实现。 插入操作需要执行两次指针调整。 1. 单向链表的实现 1.1 Node 阅读全文
posted @ 2019-10-05 16:05 百家齐鸣 阅读(183) 评论(0) 推荐(0)
摘要:先来回顾一下栈和队列的基本概念: 相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。 不同点:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。它们是完全不同的数据类型。除了它们各 阅读全文
posted @ 2019-10-05 15:08 百家齐鸣 阅读(272) 评论(0) 推荐(0)