随笔分类 - 数据结构
摘要:时间复杂度 用来估计算法运行时间的一个式子. 一般来说, 时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度: O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n2logn) < O(n3) 快速判断时间复杂度 循环减半的过程 > O(
阅读全文
摘要:from cal_time import get_running_time @get_running_time def bin_search(li, val): """ 二分查找 :param li: 要查找的有序列表 :param val: 要查找的值 :return: """ n = len(l
阅读全文
摘要:```pythondef quick_sort(alist, start, end): """快速排序""" # 递归退出 if start >= end: return # 基准元素 mid_value = alist[start] low = start high = end while low = mid_value: ...
阅读全文
摘要:```python def shell_sort(alist): """希尔排序""" n = len(alist) gap = n // 2 # 插入算法执行的次数 while gap >= 1: # 与插入算法的区别就是gap步长 for j in range(gap, n): # gap, gap+1, ..., n-1 i = j while i > 0: if alist[i] < al
阅读全文
摘要:插入排序 思想 列表被分为有序区和无序区两个部分, 最初有序区只有一个元素, 每次从无序区选择一个元素, 插入到有序区的位置, 直到无序区变空 import random from cal_time import get_running_time @get_running_time def in
阅读全文
摘要:选择排序 思想 一趟遍历记录最小的数, 放到第一个位置 再一趟遍历记录剩余列表中最小的数, 继续放置 关键点: 无序区: 第i趟, 无序区为 i~n-1 最小数的位置 import random from cal_time import get_running_time @get_r
阅读全文
摘要:冒泡排序 思想 列表中有n个数, 每两个相邻的数, 如果前边的数比后边的数大, 就交换. 关键点: 趟: 总共执行 n-1趟 无序区: 第 i 趟时, 索引 0~ n-1-i 为无序区 优化: 如果执行一趟没有交换, 则列表已是有序, 可以直接结束. import rando
阅读全文
摘要:数组和广义表 可以看成是一种特殊的线性表, 其特殊在于 :表中的元素本身也是一种线性表,内存连续,根据下标在O(1)时间读写任何元素。 二维数组,多维数组,广义表,树,图都属于非线性结构 。 数组 数组的顺序存储 :行优先顺序,列优先顺序。数组中的任意元素可以在相同的时间内存取,即顺序存储的数组是一
阅读全文
摘要:字符串 (String)是零个或多个字符组成的有限序列。长度为零的字符串成为 空字符串 (Empty String),它不包含任何字符。仅由一个或者多个空格组成的字符串为 空白字符串 (Blank String)。 注意 :空字符串和空白字符串的不同,“ ”和“”分别表示长度为1的空白串和长度为0的
阅读全文
摘要:栈 栈 (Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为 栈顶 (Top),另一端为 栈底 (Bottom), 先进后出 。当top= 1时,为空栈;当top=0时,栈中只有一个元素,并且元素进栈时top应该自增。 1. 顺序存储栈 :顺序存储结构。 2. 链栈
阅读全文
摘要:线性表 是一种典型的线性结构。头结点无前驱有一个后继,尾结点无后继有一个前驱。 链表 只能顺序查找,定位一个元素的时间复杂度为O(N),删除一个元素的时间为O(1)。 1. 线性表的顺序存储结构 :把线性表的结点按照逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表称为 顺序表 ,是
阅读全文
摘要:数据结构 就是研究数据的 逻辑结构 和 物理结构 以及他们之间的相互关系。 1. 数据 :所有能被输入到计算机中,且能被计算机处理的符号集合,是计算机操作对象的总称。 2. 数据元素 :数据中的一个“个体”,数据结构中讨论的基本单位。 3. 数据项 :数据的不可分割的最小单位。一个数据元素有若干个数
阅读全文
摘要:数据结构 数据结构,一种程序设计优化的方法论。 不仅考虑到存储的数据,同时也考虑到彼此之间的关系与运算, 目的 就是加快程序的执行速度、减少内存占用的空间。 使用计算机解决问题,必须以计算机所能接受的模式来确认问题,并且要选用适当的算法来处理数据,这就是数据结构讨论的重点。 简单来说,数据结
阅读全文