数据结构学习入门

在这里插入图片描述

1. 什么是数据结构?

数据结构(Data Structure)是计算机存储、组织数据的方式。它提供了一种高效的方式来管理和操作数据。数据结构不仅影响程序的执行效率,也决定了数据的存储方式和访问方法。

数据结构的选择直接影响算法的性能。一个好的数据结构能够提高程序的运行速度并减少存储空间的占用,因此,学习数据结构是计算机科学领域的重要基础。
在这里插入图片描述

2. 数据结构的分类

2.1 逻辑结构分类

数据结构通常按照逻辑结构可以分为以下几类:

  • 线性结构:数据元素按顺序排列,包括数组、链表、栈和队列。
  • 非线性结构:数据元素之间的关系更加复杂,包括树、图等。

2.2 存储结构分类

按照数据在计算机中的存储方式,数据结构还可以分为:

  • 顺序存储:数据按顺序存储在连续的内存空间中,如数组。
  • 链式存储:数据通过指针链接,如链表。
  • 索引存储:使用额外的索引表加快数据访问速度,如数据库中的索引。
  • 散列存储:利用哈希函数存储数据,实现快速查找,如哈希表。
    在这里插入图片描述

3. 线性结构

3.1 数组(Array)

数组是存储相同类型元素的连续内存结构。

特点
  • 访问速度快,O(1)
  • 插入和删除操作效率低,O(n)
应用场景
  • 需要快速访问的情况,例如游戏地图存储、图像处理等。
  • 需要固定大小的数据存储,如统计数据。
Python代码示例
# 数组示例(Python中的列表)
arr = [1, 2, 3, 4, 5]
print(arr[2])  # 访问索引为2的元素
arr.append(6)  # 添加元素
arr.remove(3)  # 删除元素
print(arr)

3.2 链表(Linked List)

链表由节点组成,每个节点包含数据和指向下一个节点的指针。

类型
  • 单链表:每个节点只指向下一个节点。
  • 双向链表:每个节点同时有前后两个指针。
  • 循环链表:链表的尾节点指向头节点,形成循环。
应用场景
  • 需要频繁插入和删除的情况,如浏览器历史记录管理。
  • 适用于动态数据存储,避免数组的固定大小限制。
Python代码示例(单链表)
class Node:
    def __init__(self, data):
        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):
        temp = self.head
        while temp:
            print(temp.data, end=" -> ")
            temp = temp.next
        print("None")

# 测试
llist = LinkedList()
llist.append(1)
llist.append(2)
llist.append(3)
llist.print_list()

3.3 栈(Stack)

栈是一种后进先出(LIFO)的数据结构。

特点
  • 只能在栈顶插入和删除元素。
  • 操作具有“后进先出”的特性。
应用场景
  • 递归调用的函数调用栈。
  • 表达式求值(如四则运算)。
  • 浏览器前进和后退功能。
Python代码示例
class Stack:
    def __init__(self):
        self.stack = []
    
    def push(self, data):
        self.stack.append(data)
    
    def pop(self):
        return self.stack.pop() if self.stack else None

    def peek(self):
        return self.stack[-1] if self.stack else None

# 测试
s = Stack()
s.push(10)
s.push(20)
print(s.pop())  # 输出 20

3.4 队列(Queue)

队列是一种先进先出(FIFO)的数据结构。

特点
  • 只能在队尾插入,在队首删除。
  • 遵循“先进先出”原则。
应用场景
  • 任务调度,如操作系统的进程调度。
  • 打印任务队列。
  • 消息队列,如RabbitMQ、Kafka。
Python代码示例
from collections import deque

queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
print(queue.popleft())  # 输出 1

在这里插入图片描述

4. 非线性结构

4.1 哈希表(Hash Table)

哈希表使用键值对存储数据,具有快速查找的特点。

应用场景
  • 需要快速查找的数据存储,如数据库索引。
  • 需要唯一映射的情况,如字典。
Python代码示例
hash_map = {}
hash_map["name"] = "Alice"
hash_map["age"] = 25
print(hash_map["name"])  # 输出 Alice

4.2 二叉树(Binary Tree)

二叉树是一种树状结构,每个节点最多有两个子节点。

应用场景
  • 数据检索,如二叉搜索树(BST)。
  • 组织层次结构,如文件系统。
Python代码示例(二叉搜索树)
class TreeNode:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

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

# 测试
root = TreeNode(50)
root.left = TreeNode(30)
root.right = TreeNode(70)
root.left.left = TreeNode(20)
root.left.right = TreeNode(40)
inorder_traversal(root)  # 输出 20 30 40 50 70

5. 结语

学习数据结构是编程和算法的基础,不同的数据结构适用于不同的应用场景。希望这篇文章能帮助你理解数据结构的基本概念和实现方法!

在这里插入图片描述

评论 197
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

百锦再@新空间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值