第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

數(shù)據(jù)結構入門:構建編程基石的指南

標簽:
雜七雜八

数据结构是计算机科学中一门至关重要的基础学科,它研究的是如何组织和存储数据,以满足各种操作的需求。数据结构的选择和设计直接影响算法效率和程序性能。理解不同数据结构的特性及其适用场景,对高效解决问题至关重要。

数组与链表

数组

数组是一种线性数据结构,它在常数时间内提供访问任意位置元素的能力。数组适用于存储同类型数据,并在内存中连续存放。以下是一个数组的简单实现:

class Array:
    def __init__(self, size):
        self.size = size
        self.array = [None] * size

    def get(self, index):
        if 0 <= index < self.size:
            return self.array[index]
        else:
            raise IndexError("Index out of range")

    def set(self, index, value):
        if 0 <= index < self.size:
            self.array[index] = value
        else:
            raise IndexError("Index out of range")

# 使用示例
arr = Array(5)
arr.set(0, "Apple")
arr.set(1, "Banana")
arr.get(0)  # 返回 "Apple"

链表

链表是使用指针连接数据元素的数据结构,允许在任意位置进行插入和删除操作。单链表仅提供从一个节点到下一个节点的引用。以下是一个单链表的简单实现:

class ListNode:
    def __init__(self, data):
        self.data = data
        self.next = None

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

    def append(self, data):
        new_node = ListNode(data)
        if not self.head:
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node

# 使用示例
linked_list = LinkedList()
linked_list.append("Apple")
linked_list.append("Banana")
linked_list.head.data  # 返回 "Apple"
栈与队列

栈是一种仅允许在一端进行元素添加和删除操作的后进先出(LIFO)数据结构。以下是一个栈的实现:

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

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

    def pop(self):
        if not self.stack:
            raise IndexError("pop from empty stack")
        return self.stack.pop()

    def is_empty(self):
        return not self.stack

# 使用示例
stack = Stack()
stack.push("Apple")
stack.push("Banana")
stack.pop()  # 返回 "Banana"

队列

队列是一种允许在前端仅进行元素添加、在后端仅进行元素删除操作的先进先出(FIFO)数据结构。以下是一个队列的简单实现:

class Queue:
    def __init__(self):
        self.queue = []

    def enqueue(self, item):
        self.queue.append(item)

    def dequeue(self):
        if not self.queue:
            raise IndexError("dequeue from empty queue")
        return self.queue.pop(0)

# 使用示例
queue = Queue()
queue.enqueue("Apple")
queue.enqueue("Banana")
queue.dequeue()  # 返回 "Apple"
树结构

二叉树

二叉树是一种以节点进行组织的树结构,每个节点最多有两个子节点。以下是一个二叉树的简单实现:

class BinaryTree:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

    def insert_left(self, value):
        if self.left is None:
            self.left = BinaryTree(value)
        else:
            new_node = BinaryTree(value)
            new_node.left = self.left
            self.left = new_node

    def insert_right(self, value):
        if self.right is None:
            self.right = BinaryTree(value)
        else:
            new_node = BinaryTree(value)
            new_node.right = self.right
            self.right = new_node

# 使用示例
tree = BinaryTree(1)
tree.insert_left(2)
tree.insert_right(3)

搜索树和平衡树

搜索树是一种以键值对存储数据的树结构,实现高效搜索、插入和删除操作。平衡树通过自调整确保树的形状尽可能平衡。

图与搜索算法

图是一种由节点和边组成的非线性数据结构。以下是一个图的简单实现:

class Graph:
    def __init__(self):
        self.adjacency_list = {}

    def add_vertex(self, vertex):
        if vertex not in self.adjacency_list:
            self.adjacency_list[vertex] = []

    def add_edge(self, vertex1, vertex2):
        if vertex1 in self.adjacency_list and vertex2 in self.adjacency_list:
            self.adjacency_list[vertex1].append(vertex2)
            self.adjacency_list[vertex2].append(vertex1)

# 使用示例
graph = Graph()
graph.add_vertex("A")
graph.add_vertex("B")
graph.add_edge("A", "B")

搜索算法

搜索算法用于在图中查找路径或满足特定条件的节点。以下是对广度优先搜索(BFS)和深度优先搜索(DFS)的简单实现:

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    while queue:
        vertex = queue.popleft()
        if vertex not in visited:
            visited.add(vertex)
            for neighbor in graph.adjacency_list[vertex]:
                if neighbor not in visited:
                    queue.append(neighbor)
    return visited

def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start)
    for next_node in graph.adjacency_list[start]:
        if next_node not in visited:
            dfs(graph, next_node, visited)
    return visited

# 使用示例
graph = Graph()
graph.add_vertex("A")
graph.add_vertex("B")
graph.add_vertex("C")
graph.add_vertex("D")
graph.add_edge("A", "B")
graph.add_edge("A", "C")
graph.add_edge("B", "D")
graph.add_edge("C", "D")
bfs(graph, "A")
dfs(graph, "A")
排序与查找

排序算法

排序算法用于对数据进行排序。以下是一些常见算法的实现:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

# 使用示例
arr = [3, 6, 8, 10, 1, 2, 1]
bubble_sort(arr)
insertion_sort(arr)
quick_sort(arr)

查找算法

查找算法用于在数据结构中查找特定元素。以下是一个二分查找算法的实现:


def binary_search(arr, target):
    low, high = 0, len(arr) - 1
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

# 使用示例
arr = [1, 2, 3, 4, 5]
binary_search(arr, 3)  # 返回 2
``

通过理解和实践这些数据结构和算法,构建坚实的基础,以解决复杂问题。不同场景下选择合适的数据结构将显著提升程序性能和可维护性。
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消