C語言數據結構——詳細講解《二叉樹與堆的基本概念》

C語言數據結構——詳細講解《二叉樹與堆的基本概念》

  • 前言
  • 一、樹的基礎概念
    • 1.1 為什么需要樹?
    • 1.2 樹的定義與結構
    • 1.3 樹的核心術語
    • 1.3 樹的核心術語
    • 1.4 樹的表示方法(孩子兄弟表示法)
      • 結構定義
      • 為什么用孩子兄弟表示法?
    • 1.5 樹的實際應用場景
  • 二、二叉樹的概念與特性
    • 2.1 為什么重點研究二叉樹?
    • 2.2 二叉樹的定義與核心特點
    • 2.3 特殊的二叉樹
      • 2.3.1 滿二叉樹
      • 2.3.2 完全二叉樹
    • 2.4 二叉樹的重要性質
  • 三、二叉樹的存儲結構
    • 3.1 順序存儲(數組存儲)
      • 原理
      • 示例(完全二叉樹的順序存儲)
    • 3.2 鏈式存儲(二叉鏈)
      • 原理
      • 結構定義(C語言)
      • 示例(二叉鏈結構)
  • 四、堆的概念與基礎實現
    • 4.1 堆是什么?
    • 4.2 堆的定義與核心條件
    • 4.3 堆的存儲(數組順序存儲)
      • 示例1:大根堆的數組存儲
      • 示例2:小根堆的數組存儲


前言

  • 在上一篇博客中,我們探討了隊列這種線性數據結構,而此前學習的棧也屬于線性結構——它們的元素都遵循“一對一”的線性邏輯關系。但在實際場景中,很多數據需要“一對多”的層級關系描述(比如文件系統、部門組織架構),此時線性結構就顯得力不從心。
  • 今天,我們將進入非線性數據結構的世界,從最基礎的“樹”入手,逐步聚焦到應用最廣泛的“二叉樹”,最終講解一種特殊的二叉樹——“堆”。這三者層層遞進,是后續學習高級數據結構(如紅黑樹、B+樹)的核心基礎。

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C語言數據結構專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12830540.html?spm=1001.2014.3001.5482


一、樹的基礎概念

在學習二叉樹前,我們必須先理解“樹”的本質——它是所有層級結構數據的“通用模型”,而二叉樹是樹的“簡化版”。

1.1 為什么需要樹?

在這里插入圖片描述

假設我們要存儲“電腦文件系統”的結構:C盤下有用戶系統兩個文件夾,用戶下又有文檔圖片……
在這里插入圖片描述

  • 如果用數組或鏈表(線性結構)存儲,只能按“C盤→用戶→文檔→圖片→系統”的順序排列,無法體現“父子文件夾”的層級關系。而樹的“一對多”結構,恰好能完美描述這種層級邏輯。
樹的核心價值:解決“層級數據”的存儲與訪問問題,彌補線性結構在“一對多”關系中的不足。

1.2 樹的定義與結構

樹是由n(n≥0)個有限結點組成的具有層次關系的集合,滿足以下規則:

  • 有且僅有一個根結點(如文件系統的“C盤”),根結點沒有前驅結點;
  • 除根結點外,其余結點被分成m(m>0)個互不相交的子集(如“用戶”“系統”文件夾),每個子集都是一棵獨立的“子樹”;
  • 子樹之間不能相交(否則就變成了“圖”,而非樹);
  • 一棵有N個結點的樹,必有N-1條邊(每個結點除根外,都只通過一條邊連接父結點)。

在這里插入圖片描述

在這里插入圖片描述

1.3 樹的核心術語

樹的術語較多,下面我們詳細講解一下

1.3 樹的核心術語

樹的術語較多,且需結合具體結構理解,我們以圖示的樹(根為A,子節點包含B、C、D、E、F、G等)為例,詳細講解:

術語定義示例(基于圖示樹)
父結點/雙親含有直接子結點的結點,是子結點的直接上層結點A是B、C、D、E、F、G的父結點(A直接包含這6個子結點)
子結點/孩子被父結點直接包含的結點,是父結點的直接下層結點B、C、D、E、F、G是A的子結點
結點的度結點擁有的直接子結點數量(僅統計 immediate child)A的度為6(有B、C、D、E、F、G共6個直接子結點)
樹的度樹中所有結點的度的最大值樹的度為6(A的度最大,為6)
葉子結點度為0的結點(無任何直接子結點,是樹的“最底層終端結點”)B、C、H、K、L、M、N、P、Q(這些結點沒有子結點)
分支結點度不為0的結點(非葉子結點,可繼續延伸子樹)A、D、E、F、G、J(這些結點有直接子結點)
兄弟結點擁有相同父結點的結點B、C、D、E、F、G互為兄弟結點(它們的父結點都是A)
結點的層次從根開始計數,根為第1層,子結點為第2層,依此類推A在第1層;B、C在第2層;H、I在第3層;P、Q在第4層
樹的高度/深度樹中結點的最大層次(從根到最底層葉子的最長路徑的層數)樹的高度為4(最底層結點P、Q在第4層)
祖先根結點到該結點的路徑上的所有結點P的祖先是A、E、J(路徑:A→E→J→P)
子孫以該結點為根的子樹中的所有結點(包括間接子結點)E的子孫是I、J、P、Q(E的子樹包含這些結點)
森林m(m>0)棵互不相交的樹的集合(多棵獨立樹的組合)若“以B為根的樹”和“以C為根的樹”相互獨立,則它們組成森林

1.4 樹的表示方法(孩子兄弟表示法)

樹的存儲需要同時保存“結點值”和“結點間的層次關系”,常用的是孩子兄弟表示法

結構定義

// 樹的孩子兄弟表示法結點結構
typedef struct TreeNode {int data;                  // 結點存儲的數據struct TreeNode* firstChild; // 指向該結點的“第一個子結點”(左起第一個)struct TreeNode* nextBrother; // 指向該結點的“下一個兄弟結點”(同一父結點的右側兄弟)
} TreeNode;

在這里插入圖片描述

為什么用孩子兄弟表示法?

  • 優點:只需兩個指針(firstChildnextBrother),就能表示任意結構的樹;且能將樹“轉化為二叉樹”(把“兄弟關系”當作二叉樹的“右子樹”),后續可復用二叉樹的操作邏輯。
  • 示例:若結點B有子結點E、F,且B的兄弟是C,則B->firstChild = EE->nextBrother = FB->nextBrother = C

1.5 樹的實際應用場景

  • 文件系統:根目錄(根結點)→ 文件夾(分支結點)→ 文件(葉子結點);
  • 組織架構:CEO(根結點)→ 部門總監(分支結點)→ 員工(葉子結點);
  • 數據庫索引:B樹、B+樹(基于樹結構實現高效查詢)。

二、二叉樹的概念與特性

樹的結構靈活但復雜,而二叉樹是樹中最簡單、最常用的類型——它限制了結點的度不超過2,大大降低了操作難度,且任意樹都能轉換為二叉樹。

2.1 為什么重點研究二叉樹?

在這里插入圖片描述

既然樹能表示任意層級關系,為什么還要專門學二叉樹?答案是**“trade-off(權衡)”**:

  • 樹的結點度可以是任意值(如一個結點有100個子結點),導致操作邏輯(如遍歷、插入)非常復雜;
  • 二叉樹限制“結點度≤2”,且子樹有“左、右之分”(有序),操作邏輯統一,易于實現;
  • 關鍵:任意樹都能通過“孩子兄弟表示法”轉換為二叉樹,學會二叉樹就相當于掌握了所有樹的核心操作。

2.2 二叉樹的定義與核心特點

二叉樹是結點的有限集合,滿足:

  1. 集合為空(空二叉樹);
  2. 由一個根結點 + 一棵“左子樹” + 一棵“右子樹”組成,且左、右子樹均為二叉樹;
  3. 核心約束
    • 結點的度≤2(最多有2個孩子:左孩子、右孩子);
    • 子樹有“左右次序”(左子樹和右子樹顛倒后,是不同的二叉樹)。

在這里插入圖片描述

2.3 特殊的二叉樹

二叉樹中最常用的兩種特殊類型是“滿二叉樹”和“完全二叉樹”,后者是堆的基礎。

2.3.1 滿二叉樹

在這里插入圖片描述

  • 定義:每一層的結點數都達到最大值的二叉樹(即第k層有2^(k-1)個結點)。
  • 公式:若滿二叉樹的層數為h,則總結點數為2^h - 1(等比數列求和:1+2+4+…+2^(h-1) = 2^h -1)。
  • 示例:h=3的滿二叉樹,總結點數=2^3 -1=7(第1層1個,第2層2個,第3層4個)。

2.3.2 完全二叉樹

在這里插入圖片描述

  • 定義:深度為h、有n個結點的二叉樹,若其結點與“深度為h的滿二叉樹”中編號1~n的結點一一對應(編號從根開始,從上到下、從左到右),則為完全二叉樹。
  • 核心特點:
    • 葉子結點只能出現在最后兩層
    • 最后一層的葉子結點必須從左到右連續排列(不能有“左邊空、右邊有”的情況);
    • 滿二叉樹是“特殊的完全二叉樹”(n=2^h -1時,完全二叉樹就是滿二叉樹)。
關鍵區別:滿二叉樹要求“每一層都滿”,完全二叉樹只要求“最后一層左連續”——完全二叉樹更靈活,且適合用數組存儲(無空間浪費)。

2.4 二叉樹的重要性質

以下性質基于“根結點層數為1”的規則,是后續堆操作的數學基礎:

  1. 第i層最多結點數:若根為第1層,則第i層最多有2^(i-1)個結點(如第1層1=2^0 ,第2層2=2^1, 第3層4=2^2);
  2. 深度h的最大結點數:深度為h的二叉樹,最多有2^h -1個結點(即滿二叉樹的結點數公式);
  3. 葉子結點與分支結點關系:對任意非空二叉樹,若葉子結點數為n0,度為2的結點數為n2,則必有n0 = n2 + 1(推導:總邊數=總結點數-1,且邊數= n11 + n22,總結點數= n0 + n1 + n2,聯立得n0 = n2 +1);
  4. 完全二叉樹的父/子索引關系:若完全二叉樹用數組存儲(索引從0開始),則序號為i的結點:
    • 父結點序號:(i-1)/2(整數除法,如i=1的父結點是0,i=2的父結點是0);
    • 左孩子序號:2*i + 1(若2*i+1 < 總結點數,則存在左孩子);
    • 右孩子序號:2*i + 2(若2*i+2 < 總結點數,則存在右孩子)。

三、二叉樹的存儲結構

二叉樹有兩種存儲方式,分別對應不同的應用場景:

3.1 順序存儲(數組存儲)

原理

數組存儲二叉樹的結點,結點的位置(索引)由其在完全二叉樹中的編號決定(參考“完全二叉樹的父/子索引關系”)。

  • 適合場景:完全二叉樹(無空間浪費);
  • 不適合場景:非完全二叉樹(空結點需占用數組位置,空間利用率低)。

示例(完全二叉樹的順序存儲)

若完全二叉樹結點為[A, B, C, D, E, F](根為A,左子樹B、D、E,右子樹C、F),數組存儲如下:
在這里插入圖片描述

數組索引012345
結點值ABCDEF
  • A(0)的左孩子是B(1=20+1),右孩子是C(2=20+2);
  • B(1)的左孩子是D(3=21+1),右孩子是E(4=21+2);
  • C(2)的左孩子是F(5=22+1),右孩子不存在(22+2=6 ≥ 總結點數6)。

3.2 鏈式存儲(二叉鏈)

原理

鏈表存儲二叉樹,每個結點包含“數據域”和兩個“指針域”(分別指向左孩子和右孩子),稱為“二叉鏈”。

  • 適合場景:所有二叉樹(尤其是非完全二叉樹,無空間浪費,靈活);
  • 缺點:無法像數組那樣隨機訪問,需通過指針遍歷。

結構定義(C語言)

// 二叉樹的鏈式存儲(二叉鏈)
typedef struct BinaryTreeNode {int data;                          // 結點數據struct BinaryTreeNode* leftChild;  // 指向左孩子的指針struct BinaryTreeNode* rightChild; // 指向右孩子的指針
} BTNode;

示例(二叉鏈結構)

對于結點[A, B, C, D](A的左是B,右是C;B的左是D),二叉鏈的結構為:

A
├─ leftChild → B
│  ├─ leftChild → D
│  └─ rightChild → NULL
└─ rightChild → C├─ leftChild → NULL└─ rightChild → NULL

四、堆的概念與基礎實現

堆是特殊的完全二叉樹,也是二叉樹順序存儲的典型應用(如優先隊列、堆排序)

4.1 堆是什么?

我們已經有了完全二叉樹,為什么還要定義“堆”?因為堆在“快速獲取最大值/最小值”場景中效率極高——堆的根結點永遠是“最大值(大堆)”或“最小值(小堆)”,無需遍歷整個樹就能獲取極值。

4.2 堆的定義與核心條件

堆是滿足以下兩個條件的完全二叉樹:

  1. 結構條件:堆必須是一棵完全二叉樹(保證可以用數組順序存儲,無空間浪費);
  2. 值條件(堆序性)
    • 大堆:每個父結點的值 ≥ 其左右子結點的值(根是最大值);
    • 小堆:每個父結點的值 ≤ 其左右子結點的值(根是最小值)。

在這里插入圖片描述

4.3 堆的存儲(數組順序存儲)

堆是完全二叉樹,因此用數組存儲最高效(無需額外指針,僅通過索引即可推導父子關系)。存儲規則與完全二叉樹一致,核心依賴“父、左孩子、右孩子的索引推導”:

  • 數組索引從0開始;
  • 對于序號為i的結點,可通過公式快速找到其親屬結點:
    • 父結點索引:(i - 1) / 2(整數除法,向下取整);
    • 左孩子索引:2 * i + 1(若計算結果 < 堆的元素個數,則左孩子存在);
    • 右孩子索引:2 * i + 2(若計算結果 < 堆的元素個數,則右孩子存在)。

示例1:大根堆的數組存儲

在這里插入圖片描述

大根堆的邏輯結構:根結點為70,左子結點30,右子結點5630的左子結點25、右子結點1556的右子結點10

數組存儲結構[70, 30, 56, 25, 15, 10](數組索引0~5對應元素),各結點的親屬關系推導如下:

數組索引結點值父結點(索引/值)左孩子(索引/值)右孩子(索引/值)
070無(根結點)2*0+1=1 / 302*0+2=2 / 56
130(1-1)/2=0 / 702*1+1=3 / 252*1+2=4 / 15
256(2-1)/2=0 / 702*2+1=5 / 10無(2*2+2=6 ≥ 元素個數6
325(3-1)/2=1 / 30無(2*3+1=7 ≥ 6無(2*3+2=8 ≥ 6
415(4-1)/2=1 / 30無(2*4+1=9 ≥ 6無(2*4+2=10 ≥ 6
510(5-1)/2=2 / 56無(2*5+1=11 ≥ 6無(2*5+2=12 ≥ 6

示例2:小根堆的數組存儲

在這里插入圖片描述

小根堆的邏輯結構:根結點為10,左子結點15,右子結點5615的左子結點25、右子結點3056的右子結點70

數組存儲結構[10, 15, 56, 25, 30, 70](數組索引0~5對應元素),親屬關系推導更能體現“小根堆父結點≤子結點”的特性:

數組索引結點值父結點(索引/值)左孩子(索引/值)右孩子(索引/值)
010無(根結點)2*0+1=1 / 152*0+2=2 / 56
115(1-1)/2=0 / 102*1+1=3 / 252*1+2=4 / 30
256(2-1)/2=0 / 102*2+1=5 / 70無(2*2+2=6 ≥ 6
325(3-1)/2=1 / 15無(2*3+1=7 ≥ 6無(2*3+2=8 ≥ 6
430(4-1)/2=1 / 15無(2*4+1=9 ≥ 6無(2*4+2=10 ≥ 6
570(5-1)/2=2 / 56無(2*5+1=11 ≥ 6無(2*5+2=12 ≥ 6

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C語言數據結構專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12830540.html?spm=1001.2014.3001.5482

非常感謝您的閱讀,喜歡的話記得三連哦

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921426.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STAR-CCM+|雷諾數回顧

【1】引言 前序已經學習了K-epsilon湍流模型溯源的基礎知識&#xff0c;今天再學習一些更為基礎的知識&#xff0c;回顧一下雷諾數ReReRe。 【2】雷諾數定義 雷諾數公式為&#xff1a; ReρvDμRe\frac{\rho vD}{\mu}ReμρvD? 式中&#xff0c; ρ\rhoρ——流體密度&…

Java中的死鎖

鎖的合理使用能夠保證共享數據的安全性&#xff0c;但是 使用不當也會可能引起死鎖。1. 死鎖概念 死鎖是指兩個或兩個以上的線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力干涉那它們都將無法推進下去&#xff0c;如果系統資源充足&#xff0c;進程的資源請求…

基于STM32F103C8T6的智能家居健康環境監測系統

項目開發背景 隨著城市化進程加速和居民生活水平提升&#xff0c;人們對家居環境健康與安全的需求日益增強。現代住宅常因裝修材料、密閉空間及外部污染導致甲醛超標、PM2.5濃度升高、溫濕度失衡等問題&#xff0c;長期暴露此類環境中易引發呼吸道疾病、過敏反應等健康隱患。傳…

2025職場進階:B端產品經理必備的計算機專業技能精要

當前企業級服務市場競爭日益激烈&#xff0c;2025年的B端產品經理不僅需要深厚的行業認知&#xff0c;還必須具備扎實的計算機專業技能&#xff0c;才能設計出真正符合技術趨勢與業務需求的企業級產品。而其中&#xff0c;人工智能技術已經成為B端產品不可或缺的組成部分&#…

有效三角形的個數(數組單調性)

目錄 一&#xff1a;題目鏈接 二&#xff1a;題目思路 三&#xff1a;代碼實現 一&#xff1a;題目鏈接 題目的要求是找出當前數組能組成三角形三元組的個數。 二&#xff1a;題目思路 有一種暴力枚舉解法&#xff0c;利用三層 for 循環來一一枚舉三元組的情況&#xff0c;如…

Rust在醫療系統中的應用:安全、性能與合規性實踐(上)

Rust在醫療系統中的應用:安全、性能與合規性實踐 摘要 醫療系統對軟件安全與性能存在嚴苛雙重需求,既需抵御內存漏洞、數據加密風險等安全威脅(如歷史醫療設備因軟件問題召回案例所示),又需滿足電子健康記錄(EHR)系統、醫學影像處理等高并發數據場景的性能要求,同時需…

讀寫鎖 shared_mutex 共享互斥量介紹

文章目錄讀數據對數據沒有影響&#xff0c;為什么還需要shared_mutex1. 保證讀取數據的“一致性”和“時效性”2. 協調“讀”與“寫”的競爭關系總結好的&#xff0c;我們來詳細介紹 C17 中的 std::shared_mutex&#xff08;共享互斥量&#xff0c;俗稱讀寫鎖&#xff09;的使用…

Nestjs框架: 基于裝飾器與Guards的完成RBAC權限系統設計與實現

概述 在現代權限管理系統中&#xff0c;RBAC&#xff08;基于角色的訪問控制&#xff09;是廣泛采用的一種模型RBAC 核心思想是通過角色來管理用戶權限通過角色綁定用戶、資源和權限&#xff0c;實現細粒度的訪問控制為了實現這一目標&#xff0c;我們需要在數據庫中設計合理的…

機器學習如何精準預測高值

一、概念理解“機器學習對于高值的預測保守”&#xff0c;這是建模里很常見的現象&#xff0c;尤其在生態、氣候、遙感這類數據分布高度偏斜的場景。通常可以從以下幾個角度理解&#xff1a;1. 數據分布與樣本稀缺在訓練集里&#xff0c;高值樣本往往非常少&#xff0c;遠低于中…

蜂窩物聯網模組:智能門禁產品上的關鍵部件

隨著物聯網技術的快速發展&#xff0c;蜂窩物聯網模組正逐步成為智能門禁系統的關鍵通信組件。蜂窩模組憑借其廣覆蓋、高可靠性和低功耗特性&#xff0c;正從傳統門禁系統的補充角色轉變為智能門禁的核心通信組件&#xff0c;尤其在智慧社區、商業樓宇和政府機構等場景中展現出…

[光學原理與應用-417]:非線性光學 - 線性光學(不引發頻率的變化)與非線性光學(引發頻率變化)的異同

一、定義與物理機制&#xff1a;線性響應 vs 非線性響應線性光學定義&#xff1a;光與物質相互作用時&#xff0c;介質的極化強度與入射光電場強度呈線性關系&#xff08;P?0?χ(1)E&#xff09;&#xff0c;輸出光強與輸入光強成正比&#xff08;Iout?∝Iin?&#xff09;-…

深入探討AI在三大核心測試場景中的應用

隨著人工智能&#xff08;AI&#xff09;技術的迅猛發展&#xff0c;軟件測試領域正經歷深刻變革。傳統手動測試和基于規則的自動化測試已難以應對日益復雜的系統架構與海量用戶行為。AI測試通過引入機器學習、自然語言處理、計算機視覺等技術&#xff0c;顯著提升了測試效率、…

[linux倉庫]性能加速的隱形引擎:深度解析Linux文件IO中的緩沖區奧秘

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天來學習C語言緩沖區和內核緩存區的區別以及緩存類型。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c…

一、計算機的數據存儲

計算機的世界只有0和1。 1.1 進制 十進制整數->二進制整數&#xff1a;除2倒取余二進制->十進制&#xff1a;權值相加法 結論&#xff1a;1位8進制值 3位二進制值&#xff0c;1位十六進制值 4位二進制值 public class JinZhiDemo {public static void main(String[]…

SpringBoot集成XXL-JOB保姆教程

第一步&#xff1a; 下載xxl-job源碼到本地&#xff0c;地址如下&#xff1a; xxl-job: 一個分布式任務調度平臺&#xff0c;其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線&#xff0c;開箱即用。 第二步&#xff1a; 創建…

Debezium日常分享系列之:Debezium 3.2.2.Final發布

Debezium日常分享系列之&#xff1a;Debezium 3.2.2.Final發布Debezium CoreConnector啟動時出現難以理解的錯誤臨時阻塞快照失敗可能導致數據丟失的問題修復Debezium for OracleDebezium CoreConnector 啟動時出現難以理解的錯誤 我們解決了一個問題&#xff0c;即連接器會因…

Zoom AI 技術架構研究:聯合式方法與多模態集成

一、研究背景與概述 在當今數字化轉型加速的背景下,人工智能技術正深刻改變企業協作與溝通方式。作為全球領先的視頻會議平臺,Zoom 已從單純的通信工具轉型為全面的生產力平臺,而其 AI 技術架構是這一轉變的核心驅動力。本報告將深入分析 Zoom 的 AI 技術架構,特別是其創新…

排序-快速排序 O(n log n)

快排&#xff1a;1、設定一個中間值 q[ lr >>1 ] , 讓左右區間來比較2、左邊通過 i 依次比較&#xff0c;如果比這個中間值小&#xff0c;就繼續 , 直到不符合3、右邊通過 j-- 依次比較&#xff0c;如果比這個中間值大&#xff0c;就繼續 &#xff0c;直到不符合4、兩邊…

【Proteus仿真】定時器控制系列仿真——LED小燈閃爍/流水燈/LED燈帶控制/LED小燈實現二進制

目錄 0案例視頻效果展示 0.1例子1&#xff1a;基于AT89C51單片機的定時器控制小燈閃爍 0.2例子2&#xff1a;基于AT89C51單片機的定時器T0流水燈 0.3例子3&#xff1a;基于AT89C51單片機的定時器控制LED燈帶 0.4例子4&#xff1a;基于AT89C51單片機的定時器控制LED閃爍 0…

進階向:密碼生成與管理工具

密碼生成與管理工具&#xff1a;從零開始的完全指南在現代數字生活中&#xff0c;密碼是保護個人信息和賬戶安全的第一道防線。隨著網絡服務的普及&#xff0c;每個人平均需要管理數十個不同賬戶的密碼。一個強大且獨特的密碼通常應包含12個以上字符&#xff0c;混合大小寫字母…