【数据结构与算法】数据结构知识点总结

2023-10-27

文章目录


前言

数据结构是计算机科学中的一个重要主题,它涉及到如何组织和存储数据,以便于在计算机程序中进行访问和操作。以下是一些常见的数据结构及其用途:

  1. 数组:数组是一种简单的数据结构,它可以存储一系列相同类型的数据。数组的主要优点是可以快速访问任何一个元素。数组的缺点是大小固定,一旦分配了内存空间,就无法改变。

  2. 链表:链表是一种动态数据结构,可以在运行时添加或删除元素。链表的主要优点是可以动态地分配内存空间,但是访问链表中的任何一个元素需要遍历整个链表,所以访问速度较慢。

  3. :栈是一种后进先出(LIFO)的数据结构。它通常用于存储临时数据,例如函数调用时的局部变量。栈的主要优点是可以快速访问最后一个元素,但是不能随机访问栈中的其他元素。

  4. 队列:队列是一种先进先出(FIFO)的数据结构。它通常用于实现缓冲区或消息队列。队列的主要优点是可以快速访问最后一个元素和第一个元素,但是不能随机访问队列中的其他元素。

  5. :树是一种层次结构,它可以用于表示有父子关系的数据。树的主要优点是可以快速查找和插入元素,但是删除元素比较麻烦。

  6. :图是一种非常灵活的数据结构,可以用于表示复杂的关系。图的主要优点是可以表示各种类型的关系,但是访问和操作图比较复杂。


一、数组

数组是数据结构中最基本的一种数据类型,它可以存储一组相同类型的数据,并通过下标来访问其中的元素。以下是一些关于数组的知识点总结:

(一)知识点

概念 说明
数组的定义 数组是一种由相同类型的元素组成的集合,这些元素在内存中是连续存储的。数组的大小在创建时就确定了,无法在运行时改变。
数组的下标 数组的下标从零开始,最大值为数组长度减一。可以使用下标来访问数组中的元素,例如arr[0]表示数组中的第一个元素。
多维数组 数组也可以是多维的,例如二维数组就是由多个一维数组组成的。访问多维数组中的元素需要使用多个下标,例如arr[0][0]表示二维数组中的第一个元素。
数组的初始化 数组可以在创建时进行初始化,也可以在之后的代码中进行初始化。如果没有初始化,数组中的元素将会是随机值。
数组的遍历 可以使用for循环来遍历数组中的所有元素。
数组的排序 可以使用Arrays类提供的sort方法对数组中的元素进行排序。Arrays.sort(arr);
数组的复制 可以使用Arrays类提供的copyOf方法复制数组,int[] arr2 = Arrays.copyOf(arr, arr.length);

(二)常用操作代码示例

以下是C++中数组的基本操作示例:

1. 声明数组

int arr[5]; //声明一个长度为5的整型数组

2. 初始化数组

int arr[5] = {1, 2, 3, 4, 5}; //声明一个长度为5的整型数组,并初始化为1,2,3,4,5

3. 访问数组元素

int arr[5] = {1, 2, 3, 4, 5};
cout << arr[0] << endl; //输出数组第一个元素,即1

4. 修改数组元素

int arr[5] = {1, 2, 3, 4, 5};
arr[0] = 0; //将数组第一个元素修改为0

5. 遍历数组

int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    cout << arr[i] << " "; //输出数组所有元素
}

6. 数组作为函数参数

void printArray(int arr[], int len) {
    for (int i = 0; i < len; i++) {
        cout << arr[i] << " "; //输出数组所有元素
    }
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    printArray(arr, 5); //将数组作为函数参数传递
    return 0;
}

二、链表

链表是数据结构中一种常用的线性结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。以下是一些关于链表的知识点总结:

(一)知识点

概念 说明
链表的定义 链表是一种线性结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表中的节点不一定是连续存储的,每个节点可以单独分配内存空间。
链表的分类 链表可以分为单向链表、双向链表和循环链表三种。单向链表每个节点只有一个指针指向下一个节点,双向链表每个节点有两个指针分别指向前一个节点和下一个节点,循环链表的尾节点指向头节点。
链表的操作 链表的基本操作包括插入、删除和查找。插入和删除操作需要修改节点的指针,查找操作需要遍历链表。
链表的优缺点 链表的优点是可以动态地分配内存空间,插入和删除操作效率高,缺点是访问链表中的任意节点需要遍历整个链表,效率较低。
链表的应用 链表在计算机科学中有广泛的应用,例如实现栈、队列、哈希表等数据结构,还可以用于表示多项式、图等抽象数据类型。

(二)常用操作代码示例

以下是C++中链表的基本操作示例:

1. 定义链表节点结构体

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
};

2. 创建链表

ListNode* head = new ListNode(1); //创建头节点
ListNode* node1 = new ListNode(2); //创建第一个节点
ListNode* node2 = new ListNode(3); //创建第二个节点
head->next = node1; //头节点指向第一个节点
node1->next = node2; //第一个节点指向第二个节点

3. 遍历链表

ListNode* p = head; //从头节点开始遍历
while (p != NULL) {
    cout << p->val << " "; //输出节点值
    p = p->next; //指向下一个节点
}

4. 插入节点

ListNode* newNode = new ListNode(4); //创建新节点
ListNode* p = head; //从头节点开始遍历
while (p->next != NULL) {
    p = p->next; //指向下一个节点
}
p->next = newNode; //将新节点插入到链表末尾

5. 删除节点

ListNode* p = head; //从头节点开始遍历
while (p->next != NULL && p->next->val != 3) {
    p = p->next; //指向下一个节点
}
if (p->next != NULL) {
    ListNode* temp = p->next; //保存要删除的节点
    p->next = temp->next; //删除节点
    delete temp; //释放内存
}

三、栈

栈是数据结构中一种常用的线性结构,它遵循先进后出的原则,即最后进入的元素最先弹出。以下是一些关于栈的知识点总结:

(一)知识点

概念 说明
栈的定义 栈是一种线性结构,它只允许在一端进行插入和删除操作。栈遵循先进后出的原则,即最后进入的元素最先弹出。
栈的基本操作 栈的基本操作包括入栈(push)、出栈(pop)、查看栈顶元素(peek)和判断栈是否为空(isEmpty)。
栈的实现 栈可以使用数组或链表来实现。使用数组实现的栈称为顺序栈,使用链表实现的栈称为链式栈。
栈的应用 栈在计算机科学中有广泛的应用,例如实现函数调用、表达式求值、括号匹配、迷宫路径搜索等。
栈的复杂度 入栈、出栈、查看栈顶元素和判断栈是否为空的时间复杂度均为O(1)。

(二)常用操作代码示例

以下是C++中栈的基本操作示例:

1. 头文件引用

#include <stack>

2. 声明栈

stack<int> s; //声明一个整型栈

3. 入栈

s.push(1); //将1入栈
s.push(2); //将2入栈

4. 出栈

s.pop(); //将栈顶元素2出栈

5. 访问栈顶元素

cout << s.top() << endl; //输出栈顶元素1

6. 判断栈是否为空

if (s.empty()) {
    cout << "栈为空" << endl;
} else {
    cout << "栈不为空" << endl;
}

四、队列

队列是数据结构中一种常用的线性结构,它遵循先进先出的原则,即最先进入的元素最先弹出。以下是一些关于队列的知识点总结:

(一)知识点

概念 说明
队列的定义 队列是一种线性结构,它只允许在一端进行插入操作,在另一端进行删除操作。队列遵循先进先出的原则,即最先进入的元素最先弹出。
队列的基本操作 队列的基本操作包括入队(enqueue)、出队(dequeue)、查看队头元素(peek)和判断队列是否为空(isEmpty)。
队列的实现 队列可以使用数组或链表来实现。使用数组实现的队列称为顺序队列,使用链表实现的队列称为链式队列。
队列的应用 队列在计算机科学中有广泛的应用,例如实现广度优先搜索、任务调度、消息传递等。
队列的复杂度 入队、出队、查看队头元素和判断队列是否为空的时间复杂度均为O(1)。

(二)常用操作代码示例

以下是C++中队列的基本操作示例:

1. 头文件引用

#include <queue>

2. 声明队列

queue<int> q; //声明一个整型队列

3. 入队

q.push(1); //将1入队
q.push(2); //将2入队

4. 出队

q.pop(); //将队首元素1出队

5. 访问队首元素

cout << q.front() << endl; //输出队首元素2

6. 访问队尾元素

cout << q.back() << endl; //输出队尾元素2

7. 判断队列是否为空

if (q.empty()) {
    cout << "队列为空" << endl;
} else {
    cout << "队列不为空" << endl;
}

五、树

树是数据结构中一种非线性结构,它由多个节点和边组成,节点之间有父子关系。以下是一些关于树的知识点总结:

(一)知识点

概念 说明
树的定义 树是一种非线性结构,它由多个节点和边组成,节点之间有父子关系。树的根节点是没有父节点的节点,树的叶子节点是没有子节点的节点。
树的基本概念 树的基本概念包括节点、边、根节点、叶子节点、父节点、子节点、深度、高度等。
树的遍历 树的遍历分为深度优先遍历和广度优先遍历。深度优先遍历包括前序遍历、中序遍历和后序遍历,广度优先遍历又称为层次遍历。
树的实现 树可以使用数组或链表来实现。使用数组实现的树称为顺序存储树,使用链表实现的树称为链式存储树。
树的应用 树在计算机科学中有广泛的应用,例如实现文件系统、数据库索引、哈夫曼编码等。
树的复杂度 树的遍历时间复杂度为O(n),其中n为树中节点的个数。

(二)常用操作代码示例

以下是C++中二叉树的基本操作示例:

1. 定义二叉树节点结构体

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

2. 创建二叉树

TreeNode* root = new TreeNode(1); //创建根节点
TreeNode* node1 = new TreeNode(2); //创建左子节点
TreeNode* node2 = new TreeNode(3); //创建右子节点
root->left = node1; //根节点的左子节点为node1
root->right = node2; //根节点的右子节点为node2

3. 遍历二叉树

  • 前序遍历
void preorderTraversal(TreeNode* root) {
    if (root != NULL) {
        cout << root->val << " "; //输出节点值
        preorderTraversal(root->left); //遍历左子树
        preorderTraversal(root->right); //遍历右子树
    }
}

preorderTraversal(root); //从根节点开始前序遍历

  • 中序遍历
void inorderTraversal(TreeNode* root) {
    if (root != NULL) {
        inorderTraversal(root->left); //遍历左子树
        cout << root->val << " "; //输出节点值
        inorderTraversal(root->right); //遍历右子树
    }
}
inorderTraversal(root); //从根节点开始中序遍历
  • 后序遍历
void postorderTraversal(TreeNode* root) {
    if (root != NULL) {
        postorderTraversal(root->left); //遍历左子树
        postorderTraversal(root->right); //遍历右子树
        cout << root->val << " "; //输出节点值
    }
}
postorderTraversal(root); //从根节点开始后序遍历

4. 插入节点

TreeNode* newNode = new TreeNode(4); //创建新节点
TreeNode* p = root; //从根节点开始遍历
while (p->left != NULL) {
    p = p->left; //指向左子节点
}
p->left = newNode; //将新节点插入到最左侧

5. 删除节点

TreeNode* p = root; //从根节点开始遍历
while (p->left != NULL && p->left->val != 2) {
    p = p->left; //指向左子节点
}
if (p->left != NULL) {
    TreeNode* temp = p->left; //保存要删除的节点
    p->left = temp->left; //删除节点
    delete temp; //释放内存
}

六、图

图是数据结构中一种非线性结构,它由多个节点和边组成,节点之间可以有多条边连接。以下是一些关于图的知识点总结:

(一)知识点

概念 说明
图的定义 图是一种非线性结构,它由多个节点和边组成,节点之间可以有多条边连接。图分为有向图和无向图,有向图中每条边都有一个方向,无向图中每条边没有方向。
图的基本概念 图的基本概念包括节点、边、度、路径、连通性、权重等。
图的遍历 图的遍历分为深度优先遍历和广度优先遍历。深度优先遍历和树的深度优先遍历类似,广度优先遍历和树的层次遍历类似。
图的实现 图可以使用邻接矩阵或邻接表来实现。邻接矩阵使用二维数组表示图中节点之间的连接关系,邻接表使用链表表示图中节点之间的连接关系。
图的应用 图在计算机科学中有广泛的应用,例如实现路由算法、社交网络分析、图像处理等。
图的复杂度 图的遍历时间复杂度为O(n+m),其中n为图中节点的个数,m为图中边的个数。

(二)常用操作代码示例

以下是C++中图的基本操作示例:

1. 头文件引用

#include <vector>
#include <queue>

2. 定义图节点结构体

struct GraphNode {
    int val;
    vector<GraphNode*> neighbors;
    GraphNode(int x) : val(x) {}
};

3. 创建图

GraphNode* node1 = new GraphNode(1);
GraphNode* node2 = new GraphNode(2);
GraphNode* node3 = new GraphNode(3);
node1->neighbors.push_back(node2);
node1->neighbors.push_back(node3);
node2->neighbors.push_back(node1);
node2->neighbors.push_back(node3);
node3->neighbors.push_back(node1);
node3->neighbors.push_back(node2);

4. 遍历图

  • 广度优先遍历
void bfs(GraphNode* node) {
    queue<GraphNode*> q;
    q.push(node); //将起始节点加入队列
    unordered_set<GraphNode*> visited; //记录已经访问过的节点
    visited.insert(node); //将起始节点标记为已访问
    while (!q.empty()) {
        GraphNode* curr = q.front(); //取出队首节点
        q.pop(); //将队首节点出队
        cout << curr->val << " "; //输出节点值
        for (auto neighbor : curr->neighbors) {
            if (visited.find(neighbor) == visited.end()) { //如果邻居节点未被访问过
                visited.insert(neighbor); //将邻居节点标记为已访问
                q.push(neighbor); //将邻居节点加入队列
            }
        }
    }
}
bfs(node1); //从节点1开始广度优先遍历
  • 深度优先遍历
void dfs(GraphNode* node, unordered_set<GraphNode*>& visited) {
    visited.insert(node); //将节点标记为已访问
    cout << node->val << " "; //输出节点值
    for (auto neighbor : node->neighbors) {
        if (visited.find(neighbor) == visited.end()) { //如果邻居节点未被访问过
            dfs(neighbor, visited); //递归遍历邻居节点
        }
    }
}
unordered_set<GraphNode*> visited; //记录已经访问过的节点
dfs(node1, visited); //从节点1开始深度优先遍历

总结

数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构与算法】数据结构知识点总结 的相关文章

  • 使用sqlbulkcopy之前如何创建表

    我有一个 DBF 文件 我正在尝试导入该文件 然后将其写入 SQL 表 我遇到的问题是 如果我使用 SqlBulkCopy 它需要我提前创建表 但在我的场景中这是不可能的 因为 dbf 文件不断变化 到目前为止 这是我的代码 public
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 群晖服务器共享文件忘记密码,群晖synology NAS ds 1815+忘记google authenticator二次验证密码...

    群晖synology NAS为了登录安全起见 设置了google的二次验证 当换手机或者刷机前没有解除二次验证时 就悲剧了 输入帐号密码后 就要输入6位google的二次验证吗 群晖登录不了 让你联系管理员 我就是管理员 点手机丢失 没有开
  • How to Debug the Eclipse C/C++ Indexer

    This page will guideline you to debug the C C Indexer in Eclipse when you meet C C Indexer Issues like below 1 Eclipse t
  • pthread_cond_wait pthread_cond_broadcast条件变量时要注意

    include
  • 应用服务器、开源框架常见实际问题记录

    eclipse 运行问题 1 The type javax servlet jsp PageContext cannot be resolved It is indirectly referenced from required class
  • exce中让两列数据一一对应_EXCEL让两个表格中的两列数据一一对应:

    WPS两个EXCEL中数据如何相对应的放在一起 例如 1 选中姓名这一列的数据中的标志就是表格的粗黑线 之后 依次在 开始 选项选择 编辑 排序和筛选 自定义排序 2 这时 会弹出 排序 窗口 在列的主要关键字中选择 姓名 排序依据 和 次
  • 终端对平台推送拉取数据选型

    开会讨论了一个问题 就是我们平台从终端获取到数据 经过我们的处理后 传输给另一个平台做展示 这个是实时的 要求必须经过我们平台 所以杠精住嘴 在这个传输过程中 给出了一下三个方案来传输数据 tcp websocket API 最后还是选取了
  • SpringBoot整合MyBatis

    SpringBoot整合MyBatis 转载请在文章最上方加上此句话 原文地址 http www cnblogs com zhuxiaojie p 5836159 html 前言 这段时间用springboot感觉确实挺好用的 很大程度上的
  • SQL查询优化——表分区

    1 表分区 在建表的时候将表建成分区表 2 好处 a1 提高对数据检索或操作的效率 a2 不同的分区可以保存到不同的表空间 磁盘 提高数据的安全性 a3 可以将数据分到不同的分区 a4 每个分区的数据可以独立的备份和恢复 3 表分区的方法
  • 【计算机科学】【2017.12】图像分类与回归的深度神经网络模型

    本文为意大利特伦托大学 作者 Salim MALEK 的博士论文 共98页 深度学习是机器学习的一个分支 在许多研究领域和实际中都得到了广泛应用 这种持续的发展主要可以追溯到潜在处理设施的可用性和可负担性 例如 仅在十年前 这些设施还没有普
  • np.quantile()详解

    numpy quantile numpy quantile a q axis None out None overwrite input False interpolation linear keepdims False import nu
  • Linux下的虚拟化部署

    文章目录 1 kvm安装条件 2 kvm虚拟化安装 3 kvm虚拟化相关信息 4 手动安装虚拟机 5 虚拟机管理命令 6 虚拟机在linux系统中传输 7 虚拟机快照 8 脚本执行新建 快照 修复虚拟机 9 虚拟机网络配置 1 kvm安装条
  • 硬盘的几点真相

    因为想自己修下硬盘 所以先找了远古时代的笔记本硬盘拆了看看结构 结果发现几个很有意思的地方 首先就是那个 do not cover 的小孔 相信很多人都注意到了硬盘上有个很小的小孔 从外面看进去好像是个微型可调电容 周围一圈文字 do no
  • Matlab 随机森林工具箱的配置使用

    总结一下Matlab随机森林工具箱的配置和使用 配置环境Matlab2019a windows10 vs2017 1 下载Matlab随机森林工具箱 下载地址http www buaapress com cn mzs file detail
  • java持久层框架数据源加密

    学习目标 java持久层框架数据源加密 文章目录 学习目标 1 mybatis框架数据源加密 https www cnblogs com melovemingming p 10699613 html 这里是引用https www cnblo
  • 基于HAL库的stm32的OLED显示屏显示(模拟I2C,四脚,0.96寸)

    参考视频 江科大oled程序移植stm32hal库 freertos学习 cpu使用率 哔哩哔哩 bilibili STM32入门教程 2023持续更新中 哔哩哔哩 bilibili 第一步 STM32CubeMX配置 一 时钟树配置 高速
  • vs2012配置python_Visual Studio 2012 Ultimate 上安装 Python 开发插件 PTVS

    1 我的环境 操作系统 32位 Win7 旗舰版 Service Pack 1 VS版本 Microsoft Visual Studio Ultimate 2012 版本 11 0 50727 1 RTMREL Python解释器版本 Py
  • CAD颗粒密堆积2D插件 球体重力堆积 离散元建模 分子热运动

    插件简介 CAD颗粒密堆积2D插件可用于生成二维状态下重力堆积的随机颗粒 插件可指定投放区域 颗粒的粒径范围 颗粒间的间距 颗粒个数等信息 同时可模拟颗粒弹性及摩擦摩擦系数 插件采用物理引擎对颗粒行为进行模拟 可实现颗粒在力场作用下的堆积
  • c语言小游戏 精简_C语言实现消消乐小游戏

    本文实例为大家分享了C语言实现消消乐小游戏的具体代码 供大家参考 具体内容如下 代码 include include include include include include include include using namespa
  • 线性代数-坐标系变换

    问题描述 已知一个全局坐标系 还有若干局部坐标系 如何将局部坐标系的坐标转成全局坐标系的坐标 反过来又如何进行 这里的坐标系都是直角坐标系 本文通过下面几个方面的研究来回答上面的问题 1 简单示例 2 求解过程 3 nodejs编程验证 简
  • 【数据结构与算法】数据结构知识点总结

    文章目录 前言 一 数组 一 知识点 二 常用操作代码示例 1 声明数组 2 初始化数组 3 访问数组元素 4 修改数组元素 5 遍历数组 6 数组作为函数参数 二 链表 一 知识点 二 常用操作代码示例 1 定义链表节点结构体 2 创建链