基于Python语言的入门算法和数据结构(持续更新中,求关注一波)[链表 栈 队列 复杂度 操作]

这篇文章主要是讲的Python语言的算法,本人还在不断记笔记中,文章也会持续更新,内容比较浅薄,请大家指教另外推荐一个比较好用的记笔记的软件Typora,自己已经使用很久了,感觉不错。。。虽然但是还是有欠缺。

目录

第一章 算法概述

1.1 什么是数据结构?

01 数据结构都有哪些组成方式

02 时间复杂度

例01 渐进时间复杂度

03 空间复杂度:S(n) = O(f(n))

第二章 数据结构基础

2.1 数组的基本操作 (读取 更新 插入 删除)

例01 插入:

例02 删除(时间复杂度)

2.2 链表

链表简介

2.2.1链表的基本操作(忽略查找过程插入删除操作时间复杂度都是O(1))

2.2.2数组VS链表

​编辑

2.3栈(stack)和队列(queue)

2.3.1物理结构和逻辑结构

2.3.2栈的基本操作

2.3.3队列的基本操作

2.2.5栈和队列的应用

1.栈通常用于回溯历史,倒序,因为栈通常是先进后出

2.队列通常是对历史的回忆,正序(多线程和争夺公平锁,网络爬取url)

3.双端队列

4.优先队列,基于二叉堆来实现

2.3哈希表

2.3.1哈希表的读写操作

第一章 算法概述

1.1 什么是数据结构?

01 数据结构都有哪些组成方式
  1. 线性结构 最简单的数据结构(数组 链表 栈 队列 哈希表)

  2. 树 (二叉树 二叉堆)

  3. 图(多对多的关联关系)

  4. 跳表 哈希链表 位图.....

02 时间复杂度

设T(n)为程序基本执行次数的函数(程序的相对执行时间函数),n为输入规模,以下是程序中常见的四种执行方式:

例01 渐进时间复杂度

若存在函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(in)是T(n)的同数量级函数。记作T(n)= O(f(n)),称为O(f(n)),0为算法的渐进时间复杂度,简称为时间复杂度。

如何推导出时间复杂度呢?有如下几个原则:

  1. 如果运行时间是常数量级,则用常数1表示

  2. 只保留时间函数中的最高阶项。

  3. 如果最高阶项存在,则省去最高阶项前面的系数。

03 空间复杂度:S(n) = O(f(n))

1.常量空间 O(1)

2.线性空间 O(n)

3.三维空间:当算法分配的空间是一个二维列表集合,并且集合的长度和宽度都与输入规模n成正比时,空间复杂度记作O(n^2)

4.递归空间:函数调用栈(进栈和出栈)其算法的空间复杂度和递归深度成正比

第二章 数据结构基础

2.1 数组的基本操作 (读取 更新 插入 删除)

$$
数组多适合的是读操作多,写操作少的场景 数组是顺序存储
$$

数组多适合的是读操作多,写操作少的场景 数组是顺序存储

数组读取元素和更新元素的时间复杂度都是O(1)

在初始化列表时已经确定了数组的长度,所以要想实现超范围插入则涉及到数组的扩容

在Python中,`[None] * len(self.array)` 表达式创建了一个新的列表,这个列表的长度与 `self.array` 相同,但每个元素都是 `None`。
​
这里是这个表达式的详细解释:
​
1. `None` 是Python中的一个特殊常量,表示没有值或空值。它经常用于初始化变量或作为占位符。
2. `[None]` 是一个包含一个 `None` 元素的列表。
3. `len(self.array)` 计算 `self.array` 列表的长度。
4. `[None] * len(self.array)` 通过将 `[None]` 列表复制 `len(self.array)` 次来创建一个新的列表,其中的每个元素都是 `None`。
​
这个表达式常用于创建一个与另一个列表长度相同但所有元素都是 `None` 的新列表。例如,假设你有一个包含数字的列表,并且你想创建一
个与之相同长度的列表来存储计算结果,但在计算之前你想初始化所有元素为 `None`,那么你就可以使用这种方法。
例01 插入:
'''
# 初始化列表
my_list = [6,1,5,4,2,7,8,9,3]
# 读取列表
print(my_list[2])
'''
​
# 插入算法
class MyArray:
    def __init__(self,capacity):
        self.array = [None] * capacity
        self.size = 0
    def insert(self,index,element):
        # 判断访问下标是否超出范围
        if index < 0 or index > self.size:
            raise Exception("超出数组实际元素范围!")
        # 从右向左循环,逐个向右挪动一位
        for i in range(self.size - 1,-1,-1):#从大到小遍历一个序列
            self.array[i+1] = self.array[i]
        # 腾出的位置放置新元素
        self.array[index] = element
        self.size += 1
    def output(self):
        for i in range(self.size):
            print(self.array[i])
array =
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值