欢迎访问宙启技术站
智能推送

数据结构:10个Python函数实现常用数据结构

发布时间:2023-06-12 18:49:33

在计算机科学中,数据结构是指存储和组织数据的方法。在Python中,我们可以利用函数来实现常用的数据结构。下面是10个Python函数实现常用数据结构的示例。

1. 列表(List)

列表是Python中最基本的数据结构之一,它可以存储任意类型的数据。使用Python内置函数list()可以创建一个列表。

示例:

myList = list()

2. 栈(Stack)

栈是一种线性数据结构,它遵循先进后出(LIFO)原则。我们可以使用Python内置列表(list)来实现栈。

示例:

class Stack:
    def __init__(self):
        self.stack = []
        
    def push(self, data):
        self.stack.append(data)
        
    def pop(self):
        if not self.is_empty():
            return self.stack.pop()
        else:
            return None
        
    def is_empty(self):
        return len(self.stack) == 0

3. 队列(Queue)

队列也是一种线性数据结构,它遵循先进先出(FIFO)原则。我们可以使用Python内置列表(list)来实现队列。

示例:

class Queue:
    def __init__(self):
        self.queue = []
        
    def enqueue(self, data):
        self.queue.append(data)
        
    def dequeue(self):
        if not self.is_empty():
            return self.queue.pop(0)
        else:
            return None
        
    def is_empty(self):
        return len(self.queue) == 0

4. 直接访问表(Dictionary)

直接访问表是一种非线性数据结构,它用键值对存储数据。使用Python内置函数dict()可以创建直接访问表。

示例:

myDict = dict()

5. 链表(Linked List)

链表是一种线性数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。我们可以使用类来实现链表。

示例:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        
class LinkedList:
    def __init__(self):
        self.head = None
        
    def add_node(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
        else:
            current = self.head
            while current.next is not None:
                current = current.next
            current.next = new_node
            
    def remove_node(self, data):
        if self.head is None:
            return
        if self.head.data == data:
            self.head = self.head.next
        else:
            current = self.head
            while current.next is not None:
                if current.next.data == data:
                    current.next = current.next.next
                    return
                current = current.next

6. 树(Tree)

树是一种非线性数据结构,它由节点和分支组成。父节点有多个子节点,每个子节点又可以作为父节点继续向下扩展。我们可以使用类来实现树。

示例:

class Node:
    def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data
        
class BinaryTree:
    def __init__(self):
        self.root = None
        
    def add_node(self, data):
        new_node = Node(data)
        if self.root is None:
            self.root = new_node
        else:
            current = self.root
            while True:
                if data < current.data:
                    if current.left is None:
                        current.left = new_node
                        break
                    else:
                        current = current.left
                else:
                    if current.right is None:
                        current.right = new_node
                        break
                    else:
                        current = current.right

7. 堆(Heap)

堆是一种非线性数据结构,它满足任意节点的父节点小于或等于子节点。我们可以使用Python内置模块heapq来实现堆。

示例:

import heapq

class MinHeap:
    def __init__(self):
        self.heap = []
        
    def push(self, data):
        heapq.heappush(self.heap, data)
        
    def pop(self):
        if not self.is_empty():
            return heapq.heappop(self.heap)
        else:
            return None
        
    def is_empty(self):
        return len(self.heap) == 0

8. 图(Graph)

图是一种非线性数据结构,它由节点和边组成。我们可以使用类来实现图。

示例:

class Node:
    def __init__(self, node_id):
        self.id = node_id
        self.edges = set()
        
    def add_edge(self, node):
        self.edges.add(node)
        
class Graph:
    def __init__(self):
        self.nodes = {}
        
    def add_node(self, node_id):
        self.nodes[node_id] = Node(node_id)
        
    def add_edge(self, source_id, dest_id):
        self.nodes[source_id].add_edge(dest_id)
        self.nodes[dest_id].add_edge(source_id)

9. 字符串(String)

字符串是一种基本数据类型,在Python中,字符串是不可变对象。我们可以使用Python内置字符串操作来处理字符串。

示例:

my_string = 'Hello, World!'
print(my_string[0])     # H
print(my_string[-1])    # !
print(my_string[7:12])  # World
print(len(my_string))   # 13

10. 集合(Set)

集合是一种非线性数据结构,它可以存储不重复的元素。使用Python内置函数set()可以创建一个集合。

示例:

mySet = set()