2024年最新一篇文章讲清python开发必懂的8种数据结构_python数据结构(1),2024年最新华为在线面试

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 使用队列实现堆栈

Python中的栈

栈是一种连续的数据结构,充当队列的后进先出(LIFO)版本。插入到堆栈中的最后一个元素被认为是堆栈的顶部,并且是唯一可访问的元素。要访问中间元素,必须首先删除足够多的元素,使所需的元素位于堆栈顶部。

许多开发者将堆栈想象成一堆餐盘;你可以把盘子加到或移到盘子堆的顶部,但必须移动整个盘子堆才能把一个放在底部。

image.png

添加元素称为push,删除元素称为pop。你可以在Python中使用内置的列表结构来实现栈。对于列表实现,推操作使用append()方法,弹出操作使用pop()。

stack = []
# append() function to push
# element in the stack
stack.append('a')
stack.append('b')
stack.append('c')
print('Initial stack')
print(stack)
# pop() function to pop
# element from stack in 
# LIFO order
print('\nElements popped from stack:')
print(stack.pop())
print(stack.pop())
print(stack.pop())
print('\nStack after elements are popped:')
print(stack)
# uncommenting print(stack.pop()) 
# will cause an IndexError 
# as the stack is now empty

优势:

  • 提供应用程序无法实现的后进先出数据管理:
  • 自动缩放和对象清理
  • 简单可靠的数据存储系统

缺点:

  • 堆栈内存有限
  • 堆栈上的对象太多会导致堆栈溢出错误

应用:

  • 用于开发高吞吐量的系统
  • 内存管理系统首先使用堆栈来处理最近的请求
  • 对括号匹配等问题有帮助

Python中的常见堆面试问题

  • 使用栈实现队列
  • 使用栈计算后缀表达式
  • 使用栈获取下一个最大元素
  • 使用栈创建min() 函数

Python中的链表

链表是数据的顺序集合,使用每个数据节点上的关系指针链接到列表中的下一个节点。

与数组不同,链表在列表中没有目标位置。相反,它们基于节点串联起来。

链表中的第一个节点称为头节点,最后一个节点称为尾节点,其中尾节点的next指向为null。

image.png

链表可以是单链,也可以是双链,这取决于每个节点是只有一个指向下一个节点的指针,还是还有一个指向前一个节点的指针。

你可以把链表想象成一条链;单个链接只与相邻的链接有一个连接,但所有链接一起形成一个更大的结构。

Python没有链表的内置实现,因此需要实现一个Node类来保存数据值和一个或多个指针。

class Node:
    def \_\_init\_\_(self, dataval=None):
        self.dataval = dataval
        self.nextval = None
class SLinkedList:
    def \_\_init\_\_(self):
        self.headval = None
list1 = SLinkedList()
list1.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node("Wed")
# Link first Node to second node
list1.headval.nextval = e2
# Link second Node to third node
e2.nextval = e3

优势:

  • 新元素插入和删除更高效
  • 比数组更易于重组
  • 高级数据结构 (如图形或树)都是基于链表的

缺点:

  • 每个数据点的指针存储增加了内存使用量
  • 必须始终从头节点遍历链表以查找特定元素

应用:

  • 高级数据结构的构建块
  • 需要频繁添加和删除数据的解决方案

Python中的常见链表面试问题

  • 打印给定链表的中间元素
  • 从已排序的链表中删除重复元素
  • 检查单链接列表是否为回文
  • 合并K排序链表
  • 查找两个链表的交点

Python中的循环链表

标准链表的主要缺点是,您总是必须从Head节点开始。循环链表通过将Tail节点的空指针替换为指向Head节点的指针来解决这个问题。当遍历时,程序将跟随指针,直到到达它开始的节点。

image.png
这种设置的优点是,您可以从任何节点开始遍历整个列表。它还允许您通过设置结构中所需的循环次数来使用链表作为一个可循环结构。循环链表对于长时间循环的进程非常有用,比如操作系统中的CPU分配。

优点:

  • 可以从任何节点开始遍历整个列表
  • 使链表更适合循环结构

缺点:

  • 如果没有空标记,将更难找到列表的Head和Tail节点

应用:

  • 定期循环解决方案,如CPU调度

Python中常见的循环链表面试问题

  • 在链表中检测循环
  • 反转循环链表
  • 给定大小的组中的反向圆形链表

Python中的树形结构

树是另一种基于关系的数据结构,专门用于表示层次结构。与链表一样,它们也被Node对象填充,Node对象包含一个数据值和一个或多个指针,用于定义其与直接节点的关系。

每棵树都有一个根节点,所有其他节点都从根节点分支出来。根节点包含指向它正下方所有元素的指针,这些元素被称为它的子节点。这些子节点可以有它们自己的子节点。二叉树的节点不能有两个以上的子节点。

在同一层上的任何节点都称为同级节点。没有连接子节点的节点称为叶节点。

image.png

二叉树最常见的应用是二叉搜索树。二叉搜索树擅长于搜索大量的数据集合,因为时间复杂度取决于树的深度而不是节点的数量。

二叉搜索树有四个严格的规则:

  • 左子树只包含元素小于根的节点。
  • 右子树只包含元素大于根的节点。
  • 左右子树也必须是二叉搜索树。他们必须以树的“根”来遵循上述规则。
  • 不能有重复的节点,即不能有两个节点具有相同的值。
lass Node:
    def \_\_init\_\_(self, data):
        self.left = None
        self.right = None
        self.data = data
    def insert(self, data):
# Compare the new value with the parent node
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data
# Print the tree
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()
# Use the insert method to add nodes
root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.PrintTree()

优点:

  • 用于表示层次关系
  • 动态大小,规模巨大
  • 快速插入和删除操作
  • 在二叉搜索树中,插入的节点被立即排序。
  • 二叉搜索树的搜索效率高;长度只有O(高度)。

缺点:

  • 修改或“平衡”树或从已知位置检索元素的时间开销为O(logn)
  • 子节点在父节点上没有信息,并且很难向后遍历
  • 仅适用于排序的列表。未排序的数据退化为线性搜索。

应用:

  • 非常适合存储分层数据,如文件位置

Python中的常见树面试问题

  • 检查两棵二叉树是否相同
  • 实现一个二叉树的层次顺序遍历
  • 打印二叉搜索树的周长
  • 对路径上的所有节点求和
  • 连接二叉树的所有兄弟

python中的图

图是一种数据结构,用于表示数据顶点(图的节点)之间关系的可视化。将顶点连接在一起的链接称为边。

边定义了哪些顶点被连接,但没有指明它们之间的流向。每个顶点与其他顶点都有连接,这些连接以逗号分隔的列表形式保存在顶点上。

image.png

还有一种特殊的图叫做有向图,它定义了关系的方向,类似于链表。在建模单向关系或类似流程图的结构时,有向图很有帮助。

image.png

它们主要用于以代码形式传达可视化的网络结构网络。这些结构可以为许多不同类型的关系建模,比如层次结构、分支结构,或者只是一个无序的关系网络。图形的通用性和直观性使它们成为数据科学的宠儿。
当以纯文本形式编写时,图具有顶点和边的列表:

V = {a, b, c, d, e}
E = {ab, ac, bd, cd, de}

在Python中,图的最佳实现方式是使用字典,每个顶点的名称作为键,边列表作为值。

# Create the dictionary with graph elements
graph = { "a" : ["b","c"],
                 "b" : ["a", "d"],
                 "c" : ["a", "d"],
                  "d" : ["e"],
                  "e" : ["d"]
         }
# Print the graph 
print(graph)

优点:

  • 通过代码快速传达视觉信息
  • 可用于建模广泛的现实世界问题
  • 语法学习简单

缺点:

  • 在大型图中很难理解顶点链接
  • 从图表中解析数据的时间昂贵

应用:

  • 非常适合网络或类似网络的结构建模
  • 曾为Facebook等社交网站建模

Python中的常见图形面试问题

  • 在有向图中检测周期
  • 在有向图中找到一个“母顶点”
  • 计算无向图中的边数
  • 检查两个顶点之间是否存在路径
  • 求两个顶点之间的最短路径

Python中的哈希表

哈希表是一种复杂的数据结构,能够存储大量信息并有效检索特定元素。
此数据结构使用键/值对,其中键是所需元素的名称,值是存储在该名称下的数据。

image.png

每个输入键都要经过一个哈希函数,该函数将其从初始形式转换为一个整数值,称为哈希。哈希函数必须始终从相同的输入产生相同的哈希,必须快速计算,并产生固定长度的值。Python包含一个内置的hash()函数,可以加速实现。

然后,该表使用散列来查找所需值(称为存储桶)的一般位置。然后,程序只需要在这个子组中搜索所需的值,而不必搜索整个数据池。

除了这个通用框架之外,根据应用程序的不同,哈希表也可能非常不同。有些可能允许来自不同数据类型的键,而有些可能有不同的设置桶或不同的散列函数。

下面是一个Python代码中的哈希表示例:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值