
数据结构与算法
HBLQ_GK
做一个健康快乐的程序员!
展开
-
代码笔记——非递归与递归实现二分查找
import random # 生成随机有序列表 def create_li(): # 二分查找,要求保证数据是有序的 random_li = [] for i in range(20): num = random.randint(1, 100) random_li.append(num) random_li.sort() ...原创 2020-01-28 23:27:58 · 213 阅读 · 0 评论 -
递归实现斐波那契数列以及详细解析
什么是递归:函数内部调用函数自身。 什么是斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89......像这样的数列,第一个数加第二个数等于第三个数,第二个数加第三个数等于第四个数,以这样的规律递推。F(1)=1,F(2)=1,F(n)=F(n - 1)+F(n - 2)(n≥ 3,n∈ N*) 现在我将用Python来写递归实现斐波那契数列。 d...原创 2020-01-28 20:00:25 · 9491 阅读 · 0 评论 -
解决顺序队列的“假溢出”问题之环形队列(循环队列)——Python实现
队列是一种“先进先出”(FIFO)的数据结构,队列有两端,一边只进,一边只出,即:数据从尾部进入,从头部出来,先进去的就会先出来,就像我们平时食堂打饭排队一样,先去排的先打到饭,后去排的后打到饭。 队列通常可以用数组或者是链表实现。这里以数组举例,假设这儿有一个长度为5的数组,左端为头部,负责取出数据,右端为尾部,负责存入数据。 从尾部加入数据A 再从尾部加入数据B 再从尾...原创 2019-11-15 17:20:50 · 4805 阅读 · 1 评论 -
Python实现堆栈(列表结构和链表结构)
堆栈是一种数据项按序排列的数据结构,具有“后进先出”(LIFO)的特点,堆栈所有的操作都在其顶端执行,在顶端进行插入和移除。 堆栈好比我们常见的羽毛球盒子,一个圆柱体的羽毛球盒子中从上到下装了很多羽毛球,盒子的开口在顶端,这样,如果先放入盒子的羽毛球就会在盒子的下面,取出时就会后拿到,如果后放入盒子的羽毛球就会在盒子的上面,取出时就会先拿到。 在Python中,实现堆栈有两种方式:...原创 2019-11-14 21:50:21 · 1018 阅读 · 0 评论 -
排序算法之插入排序死磕篇(Python实现)
我个人在插入排序的实现上有点晕,有点要懂不懂的感觉,我本着不完全弄明白不罢休的精神,强行来写写插入排序来说服自己。 原理说明 首先来说说插入排序的原理:插入排序是将列表中的元素逐一与已经排序好的元素进行比较,即每一次都拿一个没有排序的元素,然后插入到已经排了序的元素中去,通过比较,插入在一个合适的位置。 比如有一个列表:[ 33, 34, 25, 62, 32 ],要进行升序排列 这样...原创 2019-10-26 14:39:47 · 179 阅读 · 0 评论 -
排序算法之冒泡排序、选择排序(Python实现)
一、冒泡排序 冒泡排序的原理是:从第一个元素开始,依次和相邻的元素进行比较,如果大小顺序有误,则交换顺序后再和下一个元素比较,如同气泡慢慢从水底升到水面,这样最后一个元素就会是最大(最小)的,这样就完成的第一轮比较,接下来再进行下一轮,下一轮时,也从第一个元素开始,依次比较,这次只用比较到最后一个元素的前一个元素,因为前面已经确认了最后一个元素是最大(最小)的。再进行下一轮,一直循环,这样每经历...原创 2019-10-25 17:58:20 · 519 阅读 · 0 评论 -
Python实现双向链表
之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。 双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从任意一个节点从两个方向获取其他的所有节点,非常方便。但是由于每个节点有两个指针,所以双向链表比较消耗空间。 在设计双向链表时,通常会加上一个链表头指针,该链表头指针的数据字段不存放任何数据。 双向链表的可以是环形...原创 2019-10-22 18:19:59 · 262 阅读 · 0 评论 -
Python实现环形链表
我们将单向链表的最后一个节点的指针指向链表的头部(第一个节点),那么就形成了一个环形链表。环形节点可以从任意节点开始遍历其他的节点。 这里主要实现了环形链表节点的遍历、添加、插入、删除,反转。 代码如下: class Player: """节点类""" def __init__(self): """初始化姓名,分数,指针""" self.na...原创 2019-10-20 17:05:28 · 764 阅读 · 0 评论 -
Python实现单向链表
单向链表每个节点都是由两部分组成:数据字段和指针,指针指向下一个元素在内存中的位置。 单向链表的第一个节点节点是链表头指针,而最后一个节点的指针设为None,不指向任何元素。(链表头指针相当重要!!!) 使用Python实现单向链表,我们可以使用一个节点类来封装节点,每创建一个节点就生成一个节点类的实例。 这里主要实现了单向链表节点的遍历、添加、插入、删除,反转。 代码如下: clas...原创 2019-10-19 18:40:24 · 231 阅读 · 0 评论