python算法预备语法知识(三)——数据结构

仅针对算法刷题进行针对性python语法学习

python算法预备语法知识(三)——数据结构

目录

1. Array数组

数组是一种基础的数据结构,在python中常用list来表示数组

特性

在内存中有一段连续的内存来存储一组类型相同的数据

那么如果我们人为的令list内数据类型都一致,此时list就是python意义下的数组

这样的数组具有几个特点:

  • 优点:访问非常快(用索引)
  • 缺点:查询、插入、删除非常的慢

2. LinkedList链表

链表是一种基础的数据结构,在python中常用一个自定义的类来表示链表

特性

在内存中有一段不连续的内存,每个内存结点首尾相接,来存储一组类型相同的数据

定义如下:

# 链表
class ListNode:
	def __init__(self, x):
        self.val = x
        self.next = none

在leetcode平台刷题过程中,往往链表结构已经创建好,所以写算法过程中只需要专注于核心代码编写,这里不需要过于深入了解

链表具有几个特点:

  • 优点:插入、删除非常快
  • 缺点:查询、访问(用索引)非常的慢

3. Hash Table哈希表

哈希表是一种基础的数据结构,在python中常用Dictionary来表示哈希表,C++常用map容器

特性

由于字典的特性,在利用key查询时,利用到哈希算法因此速度很快。一般用于计数等需频繁查询的数据结构

链表具有几个特点:

  • 优点:查询,插入,删除,非常快
  • 缺点:不能用index访问

4. Queue队列

队列是一种先入先出(FIFO)的数据结构,在python中dequq来表示队列,C++常用queue容器

队列往往适用于bfs

特性

队列一般使用双端队列deque实现:

  • 双端队列:两头都可以作为队列,因此也可理解为"双端栈",利用deque实现

    from collections import deque
    a = [1,2,3]
    q = deque(a)
    # 尾部添加头部弹出
    q.append(1)
    q.popleft()
    # 头部添加尾部弹出
    q.appendleft(1)
    q.pop()
    

5. Stack栈

栈是一种先入后出的数据结构,在python中常用list或者deque来表示栈,C++常用stackvector容器

栈往往适用于dfs

特性

栈一般使用双端队列deque或栈list实现:

  • 双端队列:两头都可以作为队列,因此也可理解为"双端栈",利用deque实现

    from collections import deque
    a = [1,2,3]
    q = deque(a)
    # 尾部添加&弹出
    q.append(1)
    print(q[-1])
    q.pop()
    # 头部添加&弹出
    q.appendleft(1)
    print(q[0])
    q.popleft()
    
  • 列表:具有栈所需要的基本功能,不需要导入deque库

    a = [1,2,3]
    # 尾部添加&弹出
    a.append(1)
    a[-1]
    a.pop()
    

6. Heap堆

堆,是一种特别的完全二叉树,可以实现自动排序。在python中用函数来将list转换为heap,C++中则为优先队列

特性

堆分为大顶堆和小顶堆

大顶堆就是每次pop出来的都是这组数据里的最大值

小顶堆就是每次pop出来的都是这组数据里的最小值

一般会从heapq库中导入几个需要用到的函数:

  • heapify:用于将列表转换为堆,默认小顶堆
  • heappush:向堆内插入元素
  • heappop:从堆内弹出元素
  • nlargest:前n个最大的值
  • nsmallest:前n个最小的值

小顶堆

from heapq import heapify, heappush, heappop

a = [1,2,3]
heapify(a) # 将a转化为小顶堆
heappush(a, 4) # 此时a为[1,2,3,4]
heappop(a) # 此时a为[2,3,4],弹出
nlargest(2, a) # 返回[3,4],注意参数位置,数字在前堆名在后
nsmallest(2, a) # 返回[2,3],注意参数位置,数字在前堆名在后

大顶堆

python中如果想要改成大顶堆,那么通用做法是将原数据乘-1,转化为小顶堆之后,取出的数据再乘-1,变换回去

简而言之,就是入堆和出堆的数据都要乘-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

introversi0n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值