引言

数据结构是计算机科学中的基础学科,对于考研计算机专业的学生来说,掌握数据结构是通往成功的关键。本文将全面解析数据结构,为考研学子提供一份必备的笔记指南,帮助大家更好地理解和掌握这一重要知识点。

一、数据结构概述

1.1 数据结构定义

数据结构是计算机存储、组织数据的方式。它不仅包括数据的存储方式,还包括数据的检索、插入、删除等操作。

1.2 数据结构分类

数据结构主要分为线性结构和非线性结构两大类。线性结构包括数组、链表、栈、队列等;非线性结构包括树、图等。

二、线性结构

2.1 数组

数组是一种基本的数据结构,它是一组具有相同数据类型的元素集合。数组的特点是元素位置连续,可以通过索引直接访问。

2.1.1 数组操作

  • 初始化
  • 插入
  • 删除
  • 查找

2.1.2 代码示例

def create_array(size):
    return [0] * size

def insert_array(arr, index, value):
    if index < 0 or index >= len(arr):
        return "Index out of range"
    arr[index] = value
    return arr

def delete_array(arr, index):
    if index < 0 or index >= len(arr):
        return "Index out of range"
    del arr[index]
    return arr

def find_array(arr, value):
    for i in range(len(arr)):
        if arr[i] == value:
            return i
    return -1

2.2 链表

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

2.2.1 链表操作

  • 创建链表
  • 插入节点
  • 删除节点
  • 查找节点

2.2.2 代码示例

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

def create_linked_list(values):
    head = Node(values[0])
    current = head
    for value in values[1:]:
        current.next = Node(value)
        current = current.next
    return head

def insert_node(head, index, value):
    if index < 0:
        return "Index out of range"
    current = head
    for _ in range(index):
        if current.next is None:
            return "Index out of range"
        current = current.next
    new_node = Node(value)
    new_node.next = current.next
    current.next = new_node
    return head

def delete_node(head, index):
    if index < 0:
        return "Index out of range"
    current = head
    for _ in range(index):
        if current.next is None:
            return "Index out of range"
        current = current.next
    current.next = current.next.next
    return head

def find_node(head, value):
    current = head
    while current is not None:
        if current.data == value:
            return current
        current = current.next
    return None

2.3 栈

栈是一种后进先出(LIFO)的线性结构,它只允许在表的一端进行插入和删除操作。

2.3.1 栈操作

  • 创建栈
  • 入栈
  • 出栈
  • 查看栈顶元素

2.3.2 代码示例

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

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

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

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        return None

2.4 队列

队列是一种先进先出(FIFO)的线性结构,它只允许在表的一端进行插入操作,在另一端进行删除操作。

2.4.1 队列操作

  • 创建队列
  • 入队
  • 出队
  • 查看队首元素

2.4.2 代码示例

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

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

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

    def dequeue(self):
        if not self.is_empty():
            return self.items.pop(0)
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[0]
        return None

三、非线性结构

3.1 树

树是一种非线性结构,由节点组成,每个节点包含数据和指向子节点的指针。

3.1.1 树操作

  • 创建树
  • 插入节点
  • 删除节点
  • 查找节点

3.1.2 代码示例

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.children = []

def create_tree(values):
    head = TreeNode(values[0])
    current = head
    for value in values[1:]:
        new_node = TreeNode(value)
        current.children.append(new_node)
        current = new_node
    return head

def insert_node(root, parent_value, value):
    parent = find_node(root, parent_value)
    if parent is None:
        return "Parent node not found"
    new_node = TreeNode(value)
    parent.children.append(new_node)
    return root

def delete_node(root, value):
    current = root
    while current is not None:
        if current.data == value:
            return root
        current = find_node(current.children, value)
    return root

def find_node(root, value):
    current = root
    while current is not None:
        if current.data == value:
            return current
        current = find_node(current.children, value)
    return None

3.2 图

图是一种非线性结构,由节点和边组成,节点表示实体,边表示实体之间的关系。

3.2.1 图操作

  • 创建图
  • 添加节点
  • 添加边
  • 查找节点

3.2.2 代码示例

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

    def add_node(self, node):
        self.nodes[node] = []

    def add_edge(self, node1, node2):
        if node1 not in self.nodes or node2 not in self.nodes:
            return "One or both nodes not found"
        self.nodes[node1].append(node2)
        self.nodes[node2].append(node1)

    def find_node(self, node):
        return self.nodes.get(node, None)

四、总结

数据结构是计算机科学中的基础学科,对于考研计算机专业的学生来说,掌握数据结构是通往成功的关键。本文全面解析了数据结构,包括线性结构和非线性结构,为考研学子提供了一份必备的笔记指南。希望这篇文章能够帮助大家更好地理解和掌握数据结构,为考研之路助力。