数据结构
基本数据结构
修电脑-电视-电冰箱-就是不修理bug
这个作者很懒,什么都没留下…
展开
-
数据结构之区别与实际的应用场景
列表与链表1.列表创建刚开始是开辟了连续的空间而且连续空间的大小是一定的,插入和删除需要移动更多的元素。列表的常用方法是append与pop,都是从尾部进行操作链表不需要开辟连续的空间,只需要改变指针。所以它的插入与删除是常数时间。2.列表应用场景:批量处理数据,动态调整元素个数,大部分时间是被读取切片。天然实现栈操作。链表应用场景:频繁的插入删除元素,对线性表的长度难以估计。列表实现栈(头部作为栈顶):class Stack: def __init__(self):原创 2021-06-19 14:07:41 · 166 阅读 · 0 评论 -
数据结构之二叉搜索树的查询与删除操作
二叉搜索树删除纯叶子节点删除只有左孩子只有右孩子左右孩子都有纯叶子节点删除代码如下(考虑是不是根节点):if not node.lchild and not node.rchild: if not node.parent: self.root=None if node==node.parent.lchild: node.parent.lchild=None原创 2021-05-15 12:19:01 · 102 阅读 · 0 评论 -
数据结构之二叉搜索树的插入与遍历
二叉搜索树二叉搜索树介绍二叉搜索树的python建立二叉搜索树的插入数据操作二叉搜索树的遍历操作前部遍历中部遍历(数据排序)尾部排序逐层遍历二叉搜索树介绍二叉搜索树的python建立建立空的二叉搜索树,只存在空根节点代码如下:class Node: def __init__(self,val): self.val=val self.parent=None self.lchild=None self.rchild=Noneclass Tree: def __init__(se原创 2021-05-13 19:31:36 · 103 阅读 · 0 评论 -
数据结构之栈的Python实现
栈:Python实现栈简介Python实现栈简介栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。在日常生活中,有许多类似栈的例子,如刷洗盘子时,依次把每个洗净的盘子放到洗好的盘子上,相当于进栈;取用原创 2021-05-05 16:50:06 · 123 阅读 · 0 评论 -
数据结构之C语言的数组与python列表的比较
C语言的数组与python列表的比较C语言中的数组特点Python中的列表结构C语言中的数组特点(1)在C语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态数组。反过来说,如果数组在定义后可以改变容量,允许在任意位置插入或者删除元素,那么这样的数组称为动态数组。1、PHP、JavaScript 等解释型的脚本语言一般都支持动态数组,而 C、C++ 等编译型的语言一般不支持动态数组。2原创 2021-05-05 16:26:16 · 2287 阅读 · 0 评论 -
栈的应用之括号匹配问题
括号匹配问题给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { } ] )” 均为不正确的格式。解决此问题,单纯从每种括号的数量上进行匹配是错误的,比如对于 “[ ( ] )原创 2021-05-06 08:53:44 · 292 阅读 · 0 评论 -
数据结构之队列
线性队列队列线性队列环形队列队列像栈一样,队列也是一种线性表。它允许在表的一端插入数据,在另一端删除元素。插入元素的这一端称之为队尾(rear)。删除元素的这一端我们称之为队首(front)。队列的特性:队尾插入元素,队首删除元素FIFO(先进先出)线性队列建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。每次在队尾插入一个元素是,rear增1;每次在队原创 2021-05-06 10:42:32 · 181 阅读 · 0 评论 -
Python的内置模块实现队列
collections模块之deque简单创建一个队列,并实现进队出队操作:from collections import dequequeue=deque([1,2,3],5) //创建一个长度为5的队列,并进队1,2,3queue.append(4) //进队4queue.popleft() //把1出队,剩余2,3,4queue.append(5) //2,3,4,5queue.append(6) //2,3,4,5,6queue.append(7) //3,4,5,6,7 当进队队原创 2021-05-07 17:19:49 · 99 阅读 · 0 评论 -
利用栈解决深度优先搜索之迷宫问题
迷宫问题问题简介代码实现问题简介算法思路:给出起点和终点,并循环每一步可能走的四个方向,寻找能走的每一步,并把每一步走过的路封死,当走到绝境时,开始回到之前的可以走的路,直到到达终点。如果没有路,则返回到起点。代码实现maze=[[1,1,1,1,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,0,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,1,0,0,0,0,1,1,1原创 2021-05-08 15:52:22 · 147 阅读 · 0 评论 -
利用队列解决广度优先搜索之迷宫问题
迷宫问题广度优先搜索代码实现如下广度优先搜索算法思路:由起点出发,把起点节点处的可行路径进行进队操作,起点进行出队操作,并把进队的节点进行记录父节点的次序。把循环进行到终点时,再根据最终节点的记录的次序找出父节点,回溯到起点。代码实现如下from collections import dequemaze=[[1,1,1,1,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,0,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0原创 2021-05-08 17:34:23 · 187 阅读 · 0 评论 -
数据结构之单向链表
单向链表链表简介链表的创建与遍历头插法尾插法链表简介创建简单的链表:class Node: def __init__(self,item): self.item=item self.next=Nonea=Node(1)b=Node(2)c=Node(3)a.next=bb.next=cprint(a.next.next.item)输出为 3,此时item相当于数值,next相当于指针。链表的创建与遍历头插法创建一个链表,并插入更多的数据,每次插入都把新的当做头部。代码原创 2021-05-09 15:22:48 · 52 阅读 · 0 评论 -
数据结构之链表的插入与删除
链表的插入与删除链表的插入链表的删除链表的插入实现代码如下:class Link_list: def __init__(self,item): self.item=item self.next=Nonedef creat_link_list(li): head=Link_list(li[0]) foot=head for j in li[1:]: node=Link_list(j) foot.next=node foot=node return headhead=cr原创 2021-05-09 21:14:35 · 575 阅读 · 0 评论 -
数据结构之双链表
双链表的建立代码如下:class Node: def __init__(self,item): self.item=item self.prior=None self.next=Nonenode=Node(1)node1=Node(2)node1.prior=nodenode2=Node(3)node1.next=node2node2.prior=node1双链表的删除class Node: def __init__(self,item): self.item=原创 2021-05-09 22:06:54 · 62 阅读 · 0 评论 -
数据结构之哈希表
哈希表原创 2021-05-10 21:12:41 · 60 阅读 · 0 评论