python数据结构与算法
塔塔的守护者
珍惜——!
展开
-
详解python循环队列和链队列
1.循环队列:实际上为顺序表,把它认为是循环结构。如下图所示,初始时,first与rear两个指针指向同一块空间,当入队时,从first指向的位置插入值,然后rear指针后移,设M表示队列的长度,则rear=(rear+1)%M,判断队列是否已满:(rear+1)%M==first.此时,rear指向空的一块空间,这时认为队列已满,留出一块空的空间为了与队列为空时做区分;当出队时,从队首出队(即从first指针指向的空间出队),然后first指针后移,first指针每次指向队列中存在的第一个元素,而rear原创 2020-07-10 18:56:27 · 1355 阅读 · 0 评论 -
“图“,就让python和你一起愉快的玩耍吧——图的存储
1.“图”这部分分为无向图 、有向图、无向网(带权图)、有向网(带权图)四个内容。图的顺序存储:邻接矩阵的存储形式图的链式存储与顺序存储的组合:邻接表的存储形式2.图的邻接矩阵存储(1)无向图:无向图的邻接矩阵是对称的,是一个对称矩阵 顶点i的度=第i行(列)中1的个数 特别:完全图的邻接矩阵中,对角元素为0,其余为1 ...原创 2020-07-09 18:18:48 · 191 阅读 · 0 评论 -
您好,这盘大餐名叫:哈夫曼树与哈夫曼编码,非常delicious
饭前开胃小菜免费品尝:1.哈夫曼树是不唯一的,但是WPL是唯一的。2.list.sort( key=None, reverse=False)key可以接受一个函数,例如我们根据字符串长度来排序:a = [[1,2,3,4,5,6],[2,3,4],[5,6,7,8]]#代入x变量,实际根据len(x)比较进行升序排列a.sort(key=lambda x:len(x))print(a)上主菜了,大鱼大肉尽情享受:1.哈夫曼树#哈夫曼树class HuffmanN.原创 2020-07-08 09:04:31 · 169 阅读 · 0 评论 -
列表查找之顺序查找和二分查找
1.顺序查找:时间复杂度为#顺序查找:def linear_search(li,val): #遍历列表li for ind,v in enumerate(li): if v==val: return ind else: return None if __name__ == "__main__": li = [1,2,3,4,5,6] a = linear_search(li,4) pri原创 2020-07-07 13:55:36 · 724 阅读 · 0 评论 -
python排序算法之十兄弟
注意:排序方式:从左至右按照由小到大的顺序,即升序。十兄弟中lowB三人组,平均时间复杂度为1.冒泡排序#冒泡排序def bubble_sort(li): #最多走n-1趟 for i in range(len(li)-1): flag = False #标志位判断是否已经是有序序列 #每趟从位置0走到位置n-i-1 for j in range(len(li)-i-1): if li[j]>li[原创 2020-07-05 21:09:04 · 229 阅读 · 0 评论 -
关于链表的算法题
1.输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.class Node(): def __init__(self,item): self.item = item self.next = None class Solution(): def print_list(self,node): list1 = [] cur = node while cur:原创 2020-07-02 19:42:03 · 178 阅读 · 0 评论 -
关于数组的算法题
1.当数组中包含负数时,返回该数组的最大连续子序列的和。例如:[6,-3,-2,7,-15,1,2,2],其连续子序列的最大和是8(从第0个开始,到第3个为止)。子序列的长度至少为1。class Solution(): def sum_arr(self,array): sum = 0 max = 0 for data in array: #遍历数组求连续元素之和 sum += data原创 2020-07-02 16:00:07 · 130 阅读 · 0 评论 -
关于栈的算法题
1.题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如:序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution(): def compare(self,pushv,popv): stack =[] index = 0原创 2020-07-02 14:04:04 · 699 阅读 · 0 评论 -
python数据结构之栈
1.栈的特点:后入先出,实际上就是对顺序表和链表的进一步封装。栈可以用顺序表表示,也可以用链表表示。2.用顺序表构造栈:方法一:在线性表头部添加元素,并在头部取出元素,因为所有元素都要移动位置,相应的时间复杂度为O(n);方法二:在线性表尾部添加元素,并在尾部取出元素,相应的时间复杂度为O(1)。因此,选用方法二。用链表构造栈:方法一:在链表头部添加元素,并在头部取出元素,相应的时间复杂度为O(1);方法二:在链表尾部添加元素,并在尾部取出元素,因为要遍历整个链表,相应的时间复杂度为O(n)。因此,原创 2020-07-02 11:06:36 · 219 阅读 · 0 评论 -
python数据结构之双向链表
1.双向链表结构:2.判断是否为空,计算链表长度,遍历链表,在链表头部、尾部、任意位置插入元素,删除元素、查找元素。class Node(object): #结点类 def __init__(self,item): self.item = item self.next = None self.pre = None #单链表类class DoubleLinkList(object): def __init__(原创 2020-07-02 10:26:04 · 173 阅读 · 0 评论 -
python数据结构之单向循环链表
1.形式:单向循环链表的尾结点指向头结点。2.判断是否为空,计算链表长度,遍历链表,在链表头部、尾部、任意位置插入元素,删除元素、查找元素。class Node(object): #结点类 def __init__(self,item): self.item = item self.next = None #单链表类class SingleLinkList(object): def __init(self,node=None):原创 2020-07-02 09:15:27 · 126 阅读 · 0 评论 -
终于和“递归”成为了好朋友
1.经典的汉诺塔问题:(1)首先推荐一个汉诺塔小游戏,为了对该知识点更容易理解。(2)如下图所示,由左至右分别为a,b,c三个底座,该游戏的目的是要让a座上的三个圆盘按照从上到下由小到大的顺序放在c底座。下图展示的是三个圆盘要进行转移,转移的顺序依次应为:a->c、a->b、c->b、a->c、b->a、b->c、a->c。(3)程序详解:// 将 n 个圆盘从 a 经由 b 移动到 c 上public void hanoid(int n,原创 2020-06-17 22:55:44 · 163 阅读 · 0 评论 -
python数据结构之单向非循环链表
一、单向非循环链表1.python中的变量并不是保存真实的数据,而是保存该数据存储空间的地址。2.判断是否为空,计算链表长度,遍历链表,在链表头部、尾部、任意位置插入元素,删除元素、查找元素。class Node(object): #结点类 def __init__(self,item): self.item = item self.next = None#单链表类class SingleLinkList(object):原创 2020-07-01 20:09:53 · 122 阅读 · 0 评论 -
python数据结构之顺序表
1.顺序表的结构与扩充(1)结构分为一体式和分离式,一体式结构中表头信息(容量和存储个数)与存储内容是一个整体,当存储量已满还需要添加元素时,还得再申请更大的存储空间,并且表头地址也要改变。而分离式结构,表头与存储内容分离,表头信息中有一个空间专门存储指定内容的首地址,当存储量已满还需要添加元素时,只需将专门存储指定内容的首地址改了即可。如图所示为: (2)对于扩充,有两种形式,分别为固定数目的增加和每次扩充容量增倍。对于第一种是节省空间,但操...原创 2020-06-30 19:07:16 · 346 阅读 · 0 评论