数据结构第一弹-线性VS非线性

127 阅读3分钟

大家好,今天和大家一起学习一下数据结构,先了解一下线性与非线性~

 

在计算机科学中,数据结构是组织和存储数据的方式,它直接影响到算法的效率。根据数据元素之间的关系,数据结构可以分为两大类:线性数据结构和非线性数据结构。本文将详细介绍这两类数据结构,并通过具体示例来说明它们的特点及应用场景。

一、线性数据结构

线性数据结构中的元素按照顺序排列,每个元素都有一个直接前驱和一个直接后继(除了第一个和最后一个元素)。常见的线性数据结构包括数组、链表、栈和队列。

  1. 数组
    • 特点:固定大小,相同类型的元素连续存放。
    • 操作:随机访问、插入/删除(通常需要移动元素)。
    • 应用:用于实现列表、向量等。

Python 示例:

numbers = [1, 2, 3, 4, 5]
print(numbers[2])  # 输出 3
numbers.append(6)  # 添加新元素
print(numbers)  # 输出 [1, 2, 3, 4, 5, 6]

 

  1. 链表
    • 特点:动态大小,通过指针连接节点。
    • 操作:高效地插入/删除,但访问特定元素可能需要遍历。
    • 示例

 

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

创建链表

head = Node(1)
second = Node(2)
third = Node(3)
head.next = second
second.next = third
    • 特点:LIFO(Last In First Out)原则。
    • 操作:push(入栈)、pop(出栈)、peek(查看顶部元素)。
    • 示例

stack = []

stack.append(1)  # 入栈

stack.append(2)

print(stack.pop())  # 出栈并输出 2

  1. 队列
    • 特点:FIFO(First In First Out)原则。
    • 操作:enqueue(入队)、dequeue(出队)。
    • 示例
from collections import deque
queue = deque()
queue.append(1)  # 入队
queue.append(2)
print(queue.popleft())  # 出队并输出 1

二、非线性数据结构

非线性数据结构中的元素之间没有固定的顺序,通常表现为树形或图状结构。主要包括树和图。

    • 特点:分层结构,有一个根节点,子节点位于父节点之下。
    • 类型:二叉树、二叉搜索树、AVL树、红黑树等。
    • 示例:二叉搜索树
class TreeNode:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

 
# 插入节点
def insert(root, key):
    if root is None:
        return TreeNode(key)
    else:
        if root.val < key:
            root.right = insert(root.right, key)
        else:
            root.left = insert(root.left, key)
    return root


# 构建二叉搜索树
r = TreeNode(50)
r = insert(r, 30)
r = insert(r, 20)
r = insert(r, 40)
r = insert(r, 70)
r = insert(r, 60)
r = insert(r, 80)
    • 特点:由顶点和边组成,可以是有向的也可以是无向的。
    • 表示方法:邻接矩阵、邻接列表。
    • 示例:使用邻接列表表示有向图
graph = {
    'A': ['B', 'C'],
    'B': ['D'],
    'C': ['E'],
    'D': [],
    'E': []
}

实战场景

  • 浏览器历史记录(线性 - 栈)
    • 当用户浏览网页时,浏览器使用栈来记录用户的访问历史。每次进入新页面,当前页面URL被压入栈顶;当点击“后退”按钮时,则从栈顶弹出最近访问过的页面。
  • 社交网络好友推荐(非线性 - 图)
    • 在社交网络中,用户之间的关系可以用图来表示,其中每个用户对应于图的一个顶点,如果两个用户互为好友,则在对应的两个顶点之间建立一条边。基于这种模型,可以通过分析用户之间的联系强度来推荐潜在的新朋友。

不同数据结构各有其优势和适用场景。选择合适的数据结构对于提高程序性能至关重要。如果有疑问欢迎评论区讨论~