python——数据结构篇

数据结构

关于数据结构,我的建议是先从大话数据看起,了解基本的算法,从c语言了解再延伸到其他语言上,因为数据结构核心是算法,了解核心,再到其他语言就容易很多,再要加以灵活运用,可以到力扣上刷题(但适合有一定算法基础的人),小白的话可以先去牛客刷一下,对新手比较友好。接下来是从python角度下讲解基本数据结构。

1、把列表当做栈

在 Python 中,可以使用列表(list)来实现栈的功能。栈是一种后进先出(LIFO, Last-In-First-Out)数据结构,意味着最后添加的元素最先被移除。列表提供了一些方法,使其非常适合用于栈操作,特别是 append()pop() 方法。

用 append() 方法可以把一个元素添加到栈顶,用不指定索引的 pop() 方法可以把一个元素从栈顶释放出来。

栈操作

  • 压入(Push): 将一个元素添加到栈的顶端。

  • 弹出(Pop): 移除并返回栈顶元素。

  • 查看栈顶元素(Peek/Top): 返回栈顶元素而不移除它。

  • 检查是否为空(IsEmpty): 检查栈是否为空。

  • 获取栈的大小(Size): 获取栈中元素的数量。

#1、创建空栈
stack = []
​
#2、push操作,使用 append() 方法将元素添加到栈的顶端:
stack.append(1)
stack.append(2)
stack.append(3)
print(stack)  # 输出: [1, 2, 3]
​
#pop操作,使用 pop() 方法移除并返回栈顶元素:
top_element = stack.pop()
print(top_element)  # 输出: 3
print(stack)        # 输出: [1, 2]
​
#查看栈顶元素
直接访问列表的最后一个元素(不移除):
​
size = len(stack)
print(size)  # 输出: 2

综合例子:

class Stack:
    def __init__(self):
        self.stack = []
​
    def push(self, item):
        self.stack.append(item)
​
    def pop(self):
        if not self.is_empty():
            return self.stack.pop()
        else:
            raise IndexError("pop from empty stack")
​
    def peek(self):
        if not self.is_empty():
            return self.stack[-1]
        else:
            raise IndexError("peek from empty stack")
​
    def is_empty(self):
        return len(self.stack) == 0
​
    def size(self):
        return len(self.stack)
​
# 使用示例
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
​
print("栈顶元素:", stack.peek())  # 输出: 栈顶元素: 3
print("栈大小:", stack.size())    # 输出: 栈大小: 3
​
print("弹出元素:", stack.pop())  # 输出: 弹出元素: 3
print("栈是否为空:", stack.is_empty())  # 输出: 栈是否为空: False
print("栈大小:", stack.size())    # 输出: 栈大小: 2

2、将列表当作队列使用

在 Python 中,列表(list)可以用作队列(queue),但由于列表的特点,直接使用列表来实现队列并不是最优的选择。

队列是一种先进先出(FIFO, First-In-First-Out)的数据结构,意味着最早添加的元素最先被移除。

使用列表时,如果频繁地在列表的开头插入或删除元素,性能会受到影响,因为这些操作的时间复杂度是 O(n)。为了解决这个问题,Python 提供了 collections.deque,它是双端队列,可以在两端高效地添加和删除元素。

使用 collections.deque 实现队列

collections.deque 是 Python 标准库的一部分,非常适合用于实现队列。

from collections import deque
​
# 创建一个空队列
queue = deque()
​
# 向队尾添加元素
queue.append('a')
queue.append('b')
queue.append('c')
​
print("队列状态:", queue)  # 输出: 队列状态: deque(['a', 'b', 'c'])
​
# 从队首移除元素
first_element = queue.popleft()
print("移除的元素:", first_element)  # 输出: 移除的元素: a
print("队列状态:", queue)            # 输出: 队列状态: deque(['b', 'c'])
​
# 查看队首元素(不移除)
front_element = queue[0]
print("队首元素:", front_element)    # 输出: 队首元素: b
​
# 检查队列是否为空
is_empty = len(queue) == 0
print("队列是否为空:", is_empty)     # 输出: 队列是否为空: False
​
# 获取队列大小
size = len(queue)
print("队列大小:", size)            # 输出: 队列大小: 2

这个还没涉及有关更深的算法,只是了解了栈和队列在python角度下的运用,再之后的,我会在后续博客上发布的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值