成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 數據結構面試必問:棧、隊列、堆、二叉樹全手寫!(鏈表翻轉/堆排序吃香)

開發
面試 Python,數據結構繞不過,尤其是鏈表翻轉、堆排序,基本是必問。今天就一篇文章全搞定!

面試 Python,數據結構繞不過!

尤其是鏈表翻轉、堆排序,基本是必問。今天就一篇文章全搞定!

棧(Stack)—— 后進先出(LIFO)

手寫實現:

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        """入棧"""
        self.items.append(item)

    def pop(self):
        """出棧"""
        if not self.is_empty():
            return self.items.pop()

    def peek(self):
        """查看棧頂元素"""
        return self.items[-1] if not self.is_empty() else None

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

    def size(self):
        return len(self.items)

# 測試
stack = Stack()
stack.push(1)
stack.push(2)
print(stack.pop())  # 輸出 2

隊列(Queue)—— 先進先出(FIFO)

手寫實現:

from collections import deque

class Queue:
    def __init__(self):
        self.items = deque()

    def enqueue(self, item):
        """入隊"""
        self.items.append(item)

    def dequeue(self):
        """出隊"""
        if not self.is_empty():
            return self.items.popleft()

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

    def size(self):
        return len(self.items)

# 測試
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
print(queue.dequeue())  # 輸出 1

鏈表翻轉(反轉鏈表)—— 高頻必問!

單鏈表反轉:

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None

def reverse_linked_list(head):
    prev = None
    curr = head
    while curr:
        next_node = curr.next  # 保存下一個節點
        curr.next = prev       # 反轉指針
        prev = curr
        curr = next_node
    return prev  # 新的頭節點

# 測試
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)

new_head = reverse_linked_list(head)
while new_head:
    print(new_head.val, end=' -> ')
    new_head = new_head.next

輸出:3 -> 2 -> 1 ->

堆排序(Heap Sort)—— 手撕算法題!

基本思路:

  • 建最大堆
  • 把堆頂元素放到數組末尾,重新堆化

手寫代碼:

def heapify(arr, n, i):
    """維護堆的性質"""
    largest = i
    left = 2 * i + 1
    right = 2 * i + 2

    if left < n and arr[left] > arr[largest]:
        largest = left
    if right < n and arr[right] > arr[largest]:
        largest = right

    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

def heap_sort(arr):
    n = len(arr)

    # 建堆
    for i in range(n // 2 - 1, -1, -1):
        heapify(arr, n, i)

    # 取堆頂元素,放到末尾
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]  # 堆頂與當前末尾交換
        heapify(arr, i, 0)

# 測試
arr = [4, 10, 3, 5, 1]
heap_sort(arr)
print(arr)  # [1, 3, 4, 5, 10]

二叉樹(Binary Tree)—— 遍歷三板斧!

定義樹節點:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

前序、中序、后序遍歷(遞歸版):

def preorder(root):
    if root:
        print(root.val, end=' ')
        preorder(root.left)
        preorder(root.right)

def inorder(root):
    if root:
        inorder(root.left)
        print(root.val, end=' ')
        inorder(root.right)

def postorder(root):
    if root:
        postorder(root.left)
        postorder(root.right)
        print(root.val, end=' ')

測試構造一棵小樹:

#       1
#      / \
#     2   3
#    / \
#   4   5

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

print("前序遍歷:")
preorder(root)

print("\n中序遍歷:")
inorder(root)

print("\n后序遍歷:")
postorder(root)

小結

知識點

備注

棧/隊列

必備基礎,手寫

鏈表翻轉

頻繁面試題,記住三個指針

堆排序

必須熟悉堆化(heapify)

二叉樹遍歷

遞歸套路要熟

責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-04-20 08:37:14

數據結構二叉樹

2021-04-28 20:12:27

數據結構創建

2013-01-30 10:34:02

數據結構

2020-11-02 09:15:47

算法與數據結構

2021-01-07 08:12:47

數據結構二叉樹

2023-04-06 07:39:48

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-04-01 10:34:18

Java編程數據結構算法

2021-03-19 10:25:12

Java數據結構算法

2020-03-27 14:29:30

數據結構

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-03-29 10:13:47

Java編程數據結構算法

2021-03-22 09:00:22

Java數據結構算法

2018-03-15 08:31:57

二叉樹存儲結構

2022-04-18 07:01:36

二叉堆大根堆小根堆

2020-03-06 16:08:46

堆結構堆排序應用

2021-03-11 23:42:15

二叉樹數組排序

2019-08-22 09:22:44

數據結構二叉搜索樹

2018-09-29 05:31:14

二叉樹
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频网站在线看 | 免费av手机在线观看 | 国产偷录视频叫床高潮对白 | 97精品国产97久久久久久免费 | 欧美中文一区 | 久久国内 | 最新国产精品视频 | 国产日韩在线观看一区 | 国产成人小视频 | 日韩欧美1区2区 | 久久免费精品 | 日本电影韩国电影免费观看 | 精品亚洲一区二区三区四区五区 | 婷婷狠狠 | av网站在线免费观看 | 国产乱码高清区二区三区在线 | 成人免费网站在线 | 国产精品久久精品 | 日韩伦理电影免费在线观看 | 99伊人| 精品视频一区二区在线观看 | 三级黄片毛片 | 国产特级毛片 | 国产成人精品视频在线观看 | 国产成人99久久亚洲综合精品 | 成人av播放 | 日韩精品 电影一区 亚洲 | 日韩精品免费一区二区在线观看 | 欧美在线国产精品 | 91成人在线视频 | 亚洲网站在线 | 欧美精品一区二区三区在线播放 | 欧美中国少妇xxx性高请视频 | 看a级黄色毛片 | 国产精品视频久久 | 玖玖综合网 | 欧美一级视频在线观看 | 夜夜艹 | 久久久久无码国产精品一区 | 精品久久精品 | 亚洲欧美精品一区 |