Python实现数据结构(如:链表、栈、队列等)。

简介: Python实现数据结构(如:链表、栈、队列等)。

好的,以下是使用 Python 实现一些常见数据结构的示例代码:

  1. 链表:
    ```python
    class Node:
    def init(self, data=None):
     self.data = data
     self.next = None
    

class LinkedList:
def init(self):
self.head = None

def append(self, data):
    new_node = Node(data)
    if self.head is None:
        self.head = new_node
    else:
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

def print_list(self):
    elements = []
    current = self.head
    while current:
        elements.append(current.data)
        current = current.next
    print(elements)

创建链表对象

linked_list = LinkedList()

向链表中添加元素

linked_list.append(10)
linked_list.append(20)
linked_list.append(30)

打印链表中的元素

linked_list.print_list()

在上述示例中,定义了一个`Node`类来表示链表中的节点,每个节点包含数据和指向下一个节点的指针。然后,定义了一个`LinkedList`类来管理链表。`append`方法用于向链表中添加元素,`print_list`方法用于打印链表中的元素。
2. 栈:
```python
class Stack:
    def __init__(self):
        self.stack = []

    def is_empty(self):
        return len(self.stack) == 0

    def push(self, element):
        self.stack.append(element)

    def pop(self):
        if not self.is_empty():
            return self.stack.pop()
        else:
            print("栈已空,无法弹出元素")

    def peek(self):
        if not self.is_empty():
            return self.stack[-1]
        else:
            print("栈为空,无法查看顶部元素")

# 创建栈对象
stack = Stack()

# 入栈操作
stack.push(5)
stack.push(6)
stack.push(7)

# 打印栈顶元素
print("栈顶元素:", stack.peek())

# 出栈操作
popped_element = stack.pop()
print("弹出的元素:", popped_element)

# 检查栈是否为空
if stack.is_empty():
    print("栈为空")
else:
    print("栈不为空")

在这个示例中,定义了一个Stack类来表示栈数据结构。is_empty方法用于检查栈是否为空,push方法用于入栈操作,pop方法用于出栈操作,peek方法用于查看栈顶元素。

  1. 队列:
    ```python
    class Queue:
    def init(self):

     self.queue = []
    

    def is_empty(self):

     return len(self.queue) == 0
    

    def enqueue(self, element):

     self.queue.append(element)
    

    def dequeue(self):

     if not self.is_empty():
         return self.queue.pop(0)
     else:
         print("队列为空,无法出队")
    

    def peek(self):

     if not self.is_empty():
         return self.queue[0]
     else:
         print("队列为空,无法查看头部元素")
    

创建队列对象

queue = Queue()

入队操作

queue.enqueue(5)
queue.enqueue(6)
queue.enqueue(7)

打印队头元素

print("队头元素:", queue.peek())

出队操作

dequeued_element = queue.dequeue()
print("出队的元素:", dequeued_element)

检查队列是否为空

if queue.is_empty():
print("队列空")
else:
print("队列不为空")
`` 在这个示例中,定义了一个Queue类来表示队列数据结构。is_empty方法用于检查队列是否为空,enqueue方法用于入队操作,dequeue方法用于出队操作,peek`方法用于查看队头元素。
这些示例只是简单地实现了这些数据结构的基本操作,实际应用中可能需要根据具体需求进行更多的功能扩展和错误处理。希望这些示例对你有所帮助,如果你还有其他问题或需要进一步的解释,请随时提问😄

相关文章
|
19天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
98 9
|
10天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
19 1
|
13天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
16天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
18天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
46 4
|
21天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
48 4
|
22天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
22天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
21天前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
39 0