![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
~say hello
nothing seek ,nothing find 。
展开
-
数据结构(11)---二叉树的创建 、广度遍历 、 深度遍历(前序,中序,后序)
树用来模拟具有树状结构性质的数据集合。这里主要讨论二叉树,主要用途为:html中 DOM树数据库索引,像公司用的一级索引用的就是B+ 红黑树路由协议文件的目录结构机器学习中的决策树等二叉树如何存储?(1)可以进行顺序存储:将数据结构存储在固定的数组中,遍历快,但是占空间比较大(2)非顺序存储:因为二叉树每个结点都有:元素值,左结点和右结点,所以用链表更合适1. 二叉树的创...原创 2019-11-30 19:37:55 · 191 阅读 · 0 评论 -
数据结构(10)---归并排序
归并排序思路:一. 分而治之先拆后合并,拆分成一个元素一个元素1.拆分分2组,2组分4组…直到分成数组每个元素都是单着的2.然后合并2个元素合并,比较大小,小的在前,依此类推然后两个一组和另外两个一组比较排序然后4个一组排序比较…最后全部排序二. 递归mid = n // 2拆分和合并生成的数组是对应的,可以视为merge_sort()后返回的结果是对应的 同样大小的有...原创 2019-11-29 01:07:47 · 160 阅读 · 0 评论 -
数据结构(9)---快速排序
快速排序思路:对于数组 [ 54,26,93,17,77,31,44,55,20]先制定一个基准 a[0]=54-----这里基准一般取第一个值设置两个指针 low=1 high=n-1 需要对所有数进行遍历要求:low从左向右遍历,low指向的数都比a[0]小,high从右向左遍历,high指向的值都比a[0]大【核心代码说明:】low和a[0]比较有两种结果,对...原创 2019-11-28 21:24:05 · 146 阅读 · 0 评论 -
数据结构(8)--搜索--二分查找法
二分法查找适用方法:1.要求操作对象必须是排序过后的2.操作对象支持下标索引,必须是连着放的,即有序的顺序表1. 递归搜索这里普及一个切片的知识字符串[开始索引:结束索引:步长] ,字符串截取遵循“左闭右开”原则,也叫“包左不包右”**a[:mid]????*从第一个位置到mid-1的位置,不包括mid, 指的是截取 mid 左边的数组 a[1]到a [mid-1]**a[mid:]????*...原创 2019-11-26 01:56:07 · 105 阅读 · 0 评论 -
数据结构(7)--插入排序 和 希尔排序
1.插入排序区别与选择排序:选择排序:选择后面最小的排在前面,假设第一个是最小的,然后把最小的和后面的数比较,不断交换然后假设第二小的插入排序:是选择后面的,和前面已经有序的倒序进行比较插入排序思路数组分为两部分前一部分有序 后一部分无序第一个数放在前面 后面第二个数和前面有序的比较 ,倒序进行比较,交换位置如何定义第几次i 和每次比较的下标j ?内层循环:第1次时 ...原创 2019-11-26 00:50:31 · 91 阅读 · 0 评论 -
数据结构(6)--选择排序
1 . 插入排序思路:先假设第一个数最小,然后依次拿后面的数和最小的数比较,如果比第一个数小,则和第一个数交换位置,一轮过后,第一个数是最小的比如:第1(i)轮 最小值下标初始为0 即第一个数 剩下的 n-1个数,从 第2个数开始进行比较第2轮 最小值下标初始为1 即第二个数 剩下的n-2个数 ,从第 3个数开始进行比较,所以 j=i+1 一直到 下标为n-1...原创 2019-11-24 23:27:21 · 215 阅读 · 0 评论 -
数据结构(5)-- 冒泡排序
1 . 冒泡排序:实现从小到大排序实现原理:每次: 依此从前两个数开始比较,交换位置,大的数在后面,第一轮,比较n 次,前n-1个数不管,第n个数肯定是最大的第二轮,比较n-1次,第n-1个数肯定是第二大的,…以此类推第1次 j=0 i 走n次 range(0,n-1)第2次 j=1 i比较 n-1次 range(0,n-2)j控制需要走多少轮,i控制每轮需...原创 2019-11-24 18:17:06 · 171 阅读 · 0 评论 -
数据结构(4)---栈 / 队列 / 双端队列
栈,队列和 线性表之间的关系:栈和队列都是线性表: 即两个的实现都可以用 顺序表或者链表实现,不过是控制了访问点的方式。**线性表,**即顺序表/链表都是来表示数据怎么存放,栈和队列描述怎么操作数据,它的实现可以用链表,也可以用顺序表栈: 后进先出,栈的插入和删除都只能在栈顶,即只能在线性表的同一个端点操作**队列:先进先出,**队列在线性表的表头插入,表尾删除双端队列: 可以在队头也可...原创 2019-11-24 01:57:05 · 211 阅读 · 0 评论 -
数据结构(3)---双向链表操作 ( 是否为空/长度/头插元素/尾插元素/中间插入/删除/遍历/查找)
双向链表:每个节点有两个链接:pre: 指向前一个节点,当此节点为第一个节点时,指向空值;next:指向下一个节点,当此节点为最后一个节点时,指向空值。双向链表节点定义:值,前驱节点,后驱节点class Node(object): def __init__(self,item): self.elem=item self.pre=None ...原创 2019-11-19 00:34:52 · 1714 阅读 · 0 评论 -
数据结构(2)---单向循环链表操作 ( 是否为空/长度/头插元素/尾插元素/中间插入/删除/遍历/查找)
数据结构(2)—单向循环链表操作单个节点定义,不变class Node(object): # 节点 def __init__(self, elem): self.elem = elem # 存储元素值 self.next = None # 初始不知道是否有下个地址或地址是什么,初始化为None1.单向循环链表定义单向循环链表:最后一个节点不是...原创 2019-11-18 21:08:33 · 1804 阅读 · 0 评论 -
数据结构(1)---单链表定义和操作
数据结构(1)—单链表定义和操作首先,需要了解变量存储的是数据的地址指向a = 10 # a的空间指向10 ,存10的地址b = 20c = "aaa"a, b = b, c # 从右边开始,找到b的存储地址,把地址引用导向改变一下print(a, b) # 20 aaa1.如何定义链表一个节点node: 一个节点是一个类,需要存储: 元素域和地址域class No...原创 2019-11-17 01:34:17 · 751 阅读 · 0 评论