国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從0開始學(xué)C++ 第二十七課 數(shù)據(jù)結(jié)構(gòu)入門 - 數(shù)組與鏈表

這篇具有很好參考價值的文章主要介紹了從0開始學(xué)C++ 第二十七課 數(shù)據(jù)結(jié)構(gòu)入門 - 數(shù)組與鏈表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第二十七課:數(shù)據(jù)結(jié)構(gòu)入門 - 數(shù)組與鏈表

學(xué)習(xí)目標(biāo):

  1. 理解數(shù)組的基本概念和操作。
  2. 掌握鏈表的基本結(jié)構(gòu)與特點。
  3. 學(xué)會在C++中定義和操作數(shù)組和鏈表。
  4. 了解數(shù)組和鏈表的基本使用場景。

學(xué)習(xí)內(nèi)容:

  1. 數(shù)組(Array)

    • 概念:數(shù)組是一種線性數(shù)據(jù)結(jié)構(gòu),用一段連續(xù)的內(nèi)存空間來存儲一系列相同類型的元素。
    • 參數(shù)用法:
      • 索引(Index):數(shù)組中每個元素的位置,通常從0開始。
      • 長度(Length):數(shù)組中元素的數(shù)量,確定數(shù)組大小的屬性。
    • 代碼示例:
      #include <iostream>
      using namespace std;
      
      int main() {
          int arr[5] = {1, 2, 3, 4, 5}; // 聲明并初始化一個整型數(shù)組
      
          // 訪問并打印數(shù)組元素
          for (int i = 0; i < 5; i++) {
              cout << "Element at index " << i << ": " << arr[i] << endl;
          }
      
          return 0;
      }
      
    • 預(yù)計輸出效果:
      Element at index 0: 1
      Element at index 1: 2
      Element at index 2: 3
      Element at index 3: 4
      Element at index 4: 5
      
    • 使用場景:數(shù)組通常用于存儲固定數(shù)目的元素,適合快速地通過索引查詢元素。
  2. 鏈表(LinkedList)

    • 概念:鏈表是一種線性結(jié)構(gòu),由一系列不必在內(nèi)存中連續(xù)存儲的元素組成,每個元素均包含數(shù)據(jù)部分和指向下一個元素的指針。
    • 參數(shù)用法:
      • 節(jié)點(Node):鏈表中的元素,包含數(shù)據(jù)和指向下一個節(jié)點的指針。
      • 頭指針(Head):指向鏈表的第一個節(jié)點的指針。
    • 代碼示例:
      #include <iostream>
      using namespace std;
      
      // 定義鏈表節(jié)點結(jié)構(gòu)體
      struct Node {
          int data;
          Node* next;
      };
      
      // 打印鏈表函數(shù)
      void printList(Node* n) {
          while (n != nullptr) {
              cout << n->data << " ";
              n = n->next;
          }
          cout << endl;
      }
      
      int main() {
          Node* head = new Node();
          Node* second = new Node();
          Node* third = new Node();
      
          head->data = 1; // 賦值
          head->next = second; // 指向下一個節(jié)點
      
          second->data = 2;
          second->next = third;
      
          third->data = 3;
          third->next = nullptr;
      
          printList(head); // 打印鏈表
      
          return 0;
      }
      
    • 預(yù)計輸出效果:
      1 2 3
      
    • 使用場景:鏈表適合于元素數(shù)量變動較大的情況,便于插入和刪除元素,但訪問特定位置的元素較慢。

鏈表遍歷與插入

  1. 鏈表的遍歷

    • 鏈表的遍歷意味著按照鏈表的指針從頭到尾訪問每個節(jié)點。
    • 遍歷通常使用循環(huán)或遞歸來完成。
  2. 鏈表中的數(shù)據(jù)插入

    • 鏈表中的數(shù)據(jù)可以在頭部、尾部或任意給定節(jié)點后插入。
    • 插入操作需要更改節(jié)點的指針以維護鏈表的結(jié)構(gòu)。

鏈表的節(jié)點定義示例(C++):

class ListNode {
public:
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(nullptr)};

遍歷鏈表示例(C++):

void traverseList(ListNode* head) {
    ListNode* temp = head;
    while(temp != nullptr) {
        cout << temp->val << " ";
        temp = temp->next;
    }
    cout << endl;
}

鏈表中數(shù)據(jù)插入示例(C++):

  1. 在頭部插入:
ListNode* insertAtHead(ListNode* head, int x) {
    ListNode* newNode = new ListNode(x);
    newNode->next = head;
    head = newNode;
    return head;
}
  1. 在尾部插入:
ListNode* insertAtTail(ListNode* head, int x) {
    ListNode* newNode = new ListNode(x);
    if(head == nullptr) {
        return newNode;
    }
    ListNode* temp = head;
    while(temp->next != nullptr) {
        temp = temp->next;
    }
    temp->next = newNode;
    return head;
}
  1. 在給定節(jié)點后插入:
void insertAfterNode(ListNode* prevNode, int x) {
    if(prevNode == nullptr) {
        cout << "The given previous node cannot be null." << endl;
        return;
    }
    ListNode* newNode = new ListNode(x);
    newNode->next = prevNode->next;
    prevNode->next = newNode;
}

練習(xí)題:

  1. 實現(xiàn)一個單鏈表,并定義一個函數(shù)遍歷此鏈表。
  2. 寫出一個函數(shù),在單鏈表的頭部插入一個節(jié)點。
  3. 寫出一個函數(shù),在單鏈表的尾部插入一個節(jié)點。
  4. 寫出一個函數(shù),在單鏈表的某個節(jié)點后插入一個新節(jié)點。
#include <iostream>

class ListNode {
public:
    int val;
    ListNode *next;

    ListNode(int x) : val(x), next(nullptr)};

class SinglyLinkedList {
public:
    ListNode *head;

    SinglyLinkedList() : head(nullptr)    // 遍歷鏈表
    void traverseList() {
        ListNode *temp = head;
        while (temp != nullptr) {
            std::cout << temp->val << " ";
            temp = temp->next;
        }
        std::cout << std::endl;
    }

    // 在頭部插入節(jié)點
    void insertAtHead(int x) {
        ListNode *newNode = new ListNode(x);
        newNode->next = head;
        head = newNode;
    }

    // 在尾部插入節(jié)點
    void insertAtTail(int x) {
        ListNode *newNode = new ListNode(x);
        if (head == nullptr) {
            head = newNode;
        } else {
            ListNode *temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }

    // 在某個節(jié)點后插入新節(jié)點
    void insertAfterNode(ListNode *prevNode, int x) {
        if (prevNode == nullptr) {
            std::cout << "The given previous node cannot be null." << std::endl;
            return;
        }
        ListNode *newNode = new ListNode(x);
        newNode->next = prevNode->next;
        prevNode->next = newNode;
    }
};

int main() {
    SinglyLinkedList list;

    // 在鏈表頭部插入節(jié)點
    list.insertAtHead(5);
    list.insertAtHead(3);
    list.insertAtHead(1);

    // 在鏈表尾部插入節(jié)點
    list.insertAtTail(7);
    list.insertAtTail(9);

    // 遍歷鏈表
    list.traverseList();

    // 在鏈表中第一個節(jié)點后插入新節(jié)點
    list.insertAfterNode(list.head, 2);

    // 再次遍歷鏈表
    list.traverseList();

    return 0;
}


目錄
第二十八課 數(shù)據(jù)結(jié)構(gòu)深入 - 棧和隊列文章來源地址http://www.zghlxwxcb.cn/news/detail-818819.html

到了這里,關(guān)于從0開始學(xué)C++ 第二十七課 數(shù)據(jù)結(jié)構(gòu)入門 - 數(shù)組與鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    目錄 ?前言: 委托構(gòu)造函數(shù): 類內(nèi)初始化: 空指針: 枚舉類: 總結(jié): ? ? ? ? C++的學(xué)習(xí)難度大,內(nèi)容繁多。因此我們要及時掌握C++的各種特性,因此我們更新本篇文章,向大家介紹C++的新增特性。 委托構(gòu)造函數(shù)是指一 個類的構(gòu)造函數(shù)調(diào)用另一個類的構(gòu)造函數(shù),以減少代

    2024年02月13日
    瀏覽(19)
  • 【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    目錄 前言: 類型推導(dǎo): constexpr: 初始化列表: 基于范圍的for循環(huán): 智能指針之unique ptr Lambda表達式: 總結(jié): ????????本文我們將繼續(xù)介紹? ?C++ 11 新增十大特性的剩余六個,如果沒有看過介紹前四個特性的小伙伴的可以點進我C++的專欄就可以看到。 類型推導(dǎo)(

    2024年02月14日
    瀏覽(20)
  • 【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    目錄 前言: 單列集合:? ? ? set與list的區(qū)別: 雙列集合: map的特點: 總結(jié): ? ? ? ? ? ? ? ? ? JAVA中為我們提供了很多集合,這些集合都有自己很獨特的特點,因此我們要學(xué)習(xí)所有的集合,但是在學(xué)習(xí)所有的集合之前,我們還是先為大家介紹一下JAVA的集合體系結(jié)構(gòu),這

    2024年02月16日
    瀏覽(17)
  • C++算法之旅、05 基礎(chǔ)篇 | 第二章 數(shù)據(jù)結(jié)構(gòu)

    常用代碼模板2——數(shù)據(jù)結(jié)構(gòu) - AcWing 使用結(jié)構(gòu)體指針,new Node() 非常慢,創(chuàng)建10萬個節(jié)點就超時了,做筆試題不會用這種方式(優(yōu)化是提前初始化好數(shù)組,但這樣跟數(shù)組模擬沒區(qū)別了,而且代碼量很長) 使用兩個數(shù)組,e存儲val,ne存儲next。空節(jié)點next用-1表示 826. 單鏈表 - AcWi

    2024年02月10日
    瀏覽(21)
  • C語言第二十七彈---內(nèi)存函數(shù)

    C語言第二十七彈---內(nèi)存函數(shù)

    ? 個人主頁: ?熬夜學(xué)編程的小林 ?? 系列專欄: ?【C語言詳解】?【數(shù)據(jù)結(jié)構(gòu)詳解】 內(nèi)存函數(shù) 1、memcpy 使用和模擬實現(xiàn) 2、memmove 使用和模擬實現(xiàn) 3、memset 函數(shù)的使用 4、memcmp 函數(shù)的使用 總結(jié) 前面兩彈講解了字符函數(shù)和字符串函數(shù),但是在我們實際運用中不僅僅只有這些

    2024年02月19日
    瀏覽(28)
  • 第二十七章 Unity碰撞體Collision(下)

    第二十七章 Unity碰撞體Collision(下)

    本章節(jié)我們繼續(xù)研究碰撞體,并且探索一下碰撞體與剛體之間的聯(lián)系。我們回到之前的工程,然后給我們的紫色球體Sphere1也添加一個剛體組件。如下所示 此時,兩個球體都具備了碰撞體和剛體組件。接下來,我們Play運行查看效果 我們發(fā)現(xiàn),黃球碰撞紫球之后,兩者都向右移

    2024年02月09日
    瀏覽(27)
  • 學(xué)C的第二十七天【指針的進階(三)】

    學(xué)C的第二十七天【指針的進階(三)】

    ========================================================================= 相關(guān)代碼gitee自取 :C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 學(xué)C的第二十六天【指針的進階(二)】_高高的胖子的博客-CSDN博客 ?================================

    2024年02月16日
    瀏覽(28)
  • 【LeetCode75】第二十七題(933)最近的請求次數(shù)

    【LeetCode75】第二十七題(933)最近的請求次數(shù)

    目錄 題目: 示例: 分析: 代碼+運行結(jié)果: 首先這是LeetCode75里第一道設(shè)計類的題目,這種類型的題目會比較新穎,就是按照題目要求來設(shè)計一個類。然后測試用例是模擬真實調(diào)用類的成員函數(shù)的。 這道題也算是簡單題,整個類除了構(gòu)造函數(shù)以外就一個成員函數(shù),測試用例

    2024年02月13日
    瀏覽(34)
  • 第二十七章 配置 Web Gateway 的默認參數(shù) - 安全

    如果此處定義了用戶名和密碼,則所有系統(tǒng)管理員都必須提供此用戶名和密碼才能訪問 Web Gateway 管理頁面。 如果忘記密碼,請使用以下步驟設(shè)置新密碼: 編輯配置文件以指定新的用戶名和密碼值;在文件的 SYSTEM 部分進行更改。可以以明文形式指定密碼的值。 重新啟動網(wǎng)絡(luò)

    2024年04月26日
    瀏覽(33)
  • vue 3 第二十七章:樣式(動態(tài)class、動態(tài)style)

    在 Vue 中,我們可以使用動態(tài)綁定語法來動態(tài)地添加類名或樣式。本章將介紹 Vue 3 中如何使用動態(tài)綁定語法來動態(tài)地添加類名或樣式。 在 Vue 中,我們可以使用 :class 或 v-bind:class 指令來動態(tài)地添加類名。例如,下面的例子中,我們可以根據(jù) isActive 的值動態(tài)地為元素添加 act

    2024年02月07日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包