CSNotesCSNotes
TODO
LeetCode
数据结构
计算机组成原理
操作系统
计算机网络
数据库
Java
SSM
React
实用工具
GitHub
TODO
LeetCode
数据结构
计算机组成原理
操作系统
计算机网络
数据库
Java
SSM
React
实用工具
GitHub
  • 第一章 绪论

    • 1.1 数据结构的基本概念
  • 第二章 线性表

    • 2.1 线性表的定义和基本操作
    • 2.2 线性表的顺序表示
    • 2.3 线性表的链式表示
  • 第三章 栈、队列和数组

    • 3.1 栈
    • 3.2 队列
    • 3.3 栈和队列的应用
    • 3.4 数组和特殊矩阵
  • 第四章 串

    • 4.1 串的定义和实现
    • 4.2 串的模式匹配
  • 第五章 树与二叉树

    • 5.1 树的基本概念
    • 5.2 二叉树的概念
    • 5.3 二叉树的遍历和线索二叉树
    • 5.4 树、森林
    • 5.5 树和二叉树的应用
  • 第六章 图

    • 6.1 图的基本概念
    • 6.2 图的存储及基本操作
    • 6.3 图的遍历
    • 6.4 图的应用
  • 第七章 查找

    • 7.1 查找的基本概念
    • 7.2 顺序查找和折半查找
    • 7.3 树型查找
    • 7.4 B 树和 B+ 树
    • 7.5 散列表 (哈希表)
  • 第八章 排序

    • 8.1 排序的基本概念
    • 8.2 插入排序
    • 8.3 交换排序
    • 8.4 选择排序
    • 8.5 归并排序和基数排序
    • 8.6 外部排序
  • 第九章 贪心算法

    • 9.1 贪心算法
  • 第十章 动态规划

    • 10.1 动态规划

2.2 线性表的顺序表示

2.2.1 顺序表的定义

线性表中元素的位序是从 1 开始的,而数组中元素下标是从 0 开始的。

实现 vector

template<typename T>
class Vector {
private:
    T *data; // 存储数据的指针
    int size; // 当前元素个数
    int capacity; // 当前容量

public:
    // 构造函数
    Vector() {
        data = nullptr;
        size = 0;
        capacity = 0;
    }

    // 析构函数
    ~Vector() {
        delete[] data;
    }

    // 获取当前元素个数
    int getSize() const {
        return size;
    }

    // 获取当前容量
    int getCapacity() const {
        return capacity;
    }

    // 判断是否为空
    bool isEmpty() const {
        return size == 0;
    }

    // 向 vector 末尾添加一个元素
    void pushBack(T element) {
        insert(size, element);
    }

    // 在指定位置插入一个元素
    void insert(int index, T element) {
        if (index < 0 || index > size) {
            throw std::out_of_range("Index out of range");
        }

        if (size == capacity) {
            reserve(capacity == 0 ? 1 : capacity * 2);
        }

        for (int i = size - 1; i >= index; i--) {
            data[i + 1] = data[i];
        }

        data[index] = element;
        size++;
    }

    // 删除指定位置的元素
    void remove(int index) {
        if (index < 0 || index >= size) {
            throw std::out_of_range("Index out of range");
        }

        for (int i = index; i < size - 1; i++) {
            data[i] = data[i + 1];
        }

        size--;
    }

    // 获取指定位置的元素
    T get(int index) const {
        if (index < 0 || index >= size) {
            throw std::out_of_range("Index out of range");
        }

        return data[index];
    }

    // 修改指定位置的元素
    void set(int index, T element) {
        if (index < 0 || index >= size) {
            throw std::out_of_range("Index out of range");
        }

        data[index] = element;
    }

    // 扩容
    void reserve(int newCapacity) {
        if (newCapacity <= capacity) {
            return;
        }

        T *newData = new T[newCapacity];
        for (int i = 0; i < size; i++) {
            newData[i] = data[i];
        }

        delete[] data;
        data = newData;
        capacity = newCapacity;
    }
};
编辑此页
上次更新:
Prev
2.1 线性表的定义和基本操作
Next
2.3 线性表的链式表示