Python 实现常用数据结构详解与应用

下面是一个关于常见数据结构的教程,涵盖基本概念、实现和示例代码。

数据结构教程

1. 数组(Array

概念:数组是一种线性数据结构,可以存储固定大小的相同类型元素,支持通过索引访问。

特点

  • 固定大小
  • 访问速度快(O(1)
  • 插入和删除操作复杂度为O(n)

Python示例

 码

# 创建数组

arr = [1, 2, 3, 4, 5]  

# 访问元素

print(arr[0])  # 输出: 1

# 插入元素

arr.append(6# 在末尾添加

print(arr)  # 输出: [1, 2, 3, 4, 5, 6]

# 删除元素

arr.remove(3# 删除值为3的元素

print(arr)  # 输出: [1, 2, 4, 5, 6]

2. 链表(Linked List

概念:链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

特点

  • 动态大小
  • 插入和删除操作较快(O(1)
  • 访问速度较慢(O(n)

Python示例

 

        self.data = data

        self.next = None

class LinkedList:

    def __init__(self):

        self.head = None

    def append(self, data):

        new_node = Node(data)

        if not self.head:

            self.head = new_node

            return

        last = self.head

        while last.next:

            last = last.next

        last.next = new_node

    def print_list(self):

        curr = self.head

        while curr:

        

# 使用示例

ll = LinkedList()

ll.append(1)

ll.append(2)

ll.append(3)

ll.print_list()  # 输出: 1 -> 2 -> 3 -> None

3. 栈(Stack

概念:栈是一种后进先出(LIFO)的数据结构,只能在一端进行插入和删除操作。

特点

  • 只允许在栈顶进行操作
  • 访问速度快(O(1)
  • 插入和删除操作复杂度为O(1)

 

    def push(self, data):

        self.stack.append(data)

    def pop(self):

        if not self.is_empty():

            return self.stack.pop()

        return None

    def peek(self):

        return self.stack[-1] if not self.is_empty() else None

   

        return len(self.stack) == 0

# 使用示例

s = Stack()

s.push(1)

s.push(2)

s.push(3)

print(s.pop())  # 输出: 3

print(s.peek())  # 输出: 2

4. 队列(Queue

概念:队列是一种先进先出(FIFO)的数据结构,元素从一端入队,从另一端出队。

特点

  • 只允许在队列的两端进行操作
  • 插入和删除操作复杂度为O(1)

 

    def __init__(self):

        self.queue = deque()

    def enqueue(self, data):

        self.queue.append(data)

    def dequeue(self):

        if not self.is_empty():

            return self.queue.popleft()

        return None

    def is_empty(self):

        return len(self.queue) == 0

# 使用示例

q = Queue()

q.enqueue(1)

q.enqueue(2)

q.enqueue(3)

print(q.dequeue())  # 输出: 1

5. 哈希表(Hash Table

概念:哈希表是一种以键值对形式存储数据的结构,使用哈希函数将键映射到数组的索引。

特点

  • 快速查找(O(1)
  • 插入和删除操作复杂度为O(1)
  • 可能发生哈希冲突

Python示例

  

    def __init__(self):

        self.table = {}

    def insert(self, key, value):

        self.table[key] = value

    def get(self, key):

        return self.table.get(key, None)

    def remove(self, key):

        if key in self.table:

            del self.table[key]

# 使用示例

ht = HashTable()

ht.insert('name', 'Alice')

ht.insert('age', 30)

print(ht.get('name'))  # 输出: Alice

6. 树(Tree

概念:树是一种层次数据结构,由节点组成,其中一个节点是根节点,其他节点通过边连接。

特点

  • 动态大小
  • 查找、插入和删除操作复杂度为O(log n)(平衡树)

Python示例

 

        self.right = None

        self.val = key

class BinaryTree:

    def __init__(self):

        self.root = None

    def insert(self, root, key):

        if root is None:

            return TreeNode(key)

        else:

            if root.val < key:

                root.right = self.insert(root.right, key)

            else:

                root.left = self.insert(root.left, key)

         return ro ot 

    def inorder(self, root): 

        return self.inorder(root.left) + [root.val] + self.inorder(root.right) if root else []

# 使用示例

bt = BinaryTree()

bt.root = bt.insert(bt.root, 5)

bt.insert(bt.root, 3)

bt.insert(bt.root, 7)

print(bt.inorder(bt.root))  # 输出: [3, 5, 7]

7. 图(Graph

概念:图是一种非线性数据结构,由一组顶点和连接这些顶点的边组成。

特点

  • 可以是有向图或无向图
  • 适用于网络、关系等数据

Python示例

 

        self.graph = {}

    def add_edge(self, u, v):

        if u not in self.graph:

            self.graph[u] = []

        self.graph[u].append(v)

    def print_graph(self):

        for vertex in self.graph:

            print(vertex, "->", self.graph[vertex])

# 使用示例

g = Graph()

g.add_edge(0, 1)

g.add_edge(0, 2)

g.add_edge(1, 2)

g.print_graph()  # 输出: 0 -> [1, 2]  1 -> [2]

更多详细内容请访问

Python实现常用数据结构详解与应用资源-CSDN文库  https://download.csdn.net/download/xiaoxingkongyuxi/89826575

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nantangyuxi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值