2024-2025-1 20241411 《計算機基礎與程式設計》第七週學習總結

王思棋發表於2024-11-10

作業資訊

這個作業屬於哪個課程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/
這個作業要求在哪裡 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07
這個作業的目標 陣列與連結串列、基於陣列和基於連結串列實現資料結構、無序表與有序表、樹、圖、子程式與引數
作業正文 https://www.cnblogs.com/wangsiqi828828/p/18538332

教材學習內容總結

以下是關於陣列和連結串列的知識點總結:
一、陣列

  1. 定義:
    • 一組具有相同資料型別的元素按順序儲存在連續的記憶體空間中。
  2. 特點:
    • 隨機訪問:可以透過下標在常數時間內訪問任意元素。例如,訪問陣列中的第 n 個元素非常高效。
    • 長度固定:建立陣列時需要指定長度,一旦確定,在程式執行過程中通常難以改變。
    • 記憶體連續:儲存在連續的記憶體空間,有利於 CPU 的快取機制,提高訪問速度。
  3. 操作:
    • 插入元素:在末尾插入相對容易,但在中間插入需要移動大量元素,時間複雜度為 O(n)。
    • 刪除元素:類似插入,在中間刪除也需要移動大量元素,時間複雜度為 O(n)。
  4. 應用場景:
    • 適合頻繁隨機訪問的情況,如儲存一組已知數量的元素。
    二、連結串列
  5. 定義:
    • 由一系列節點組成,每個節點包含資料和指向下一個節點的指標(對於雙向連結串列,還有指向前一個節點的指標)。
  6. 特點:
    • 動態長度:可以根據需要動態地增加或刪除節點,無需預先指定長度。
    • 非連續儲存:節點分散在記憶體中,透過指標連線。
    • 插入和刪除高效:只需修改指標即可完成插入和刪除操作,時間複雜度為 O(1)(在已知插入或刪除位置的情況下)。
  7. 操作:
    • 插入元素:在連結串列頭部、尾部或中間插入都相對容易,只需調整指標。
    • 刪除元素:同樣,透過調整指標即可刪除節點。
  8. 應用場景:
    • 頻繁進行插入和刪除操作的情況。
    • 對於記憶體空間有限且不確定元素數量的情況也很適用。
    總之,陣列和連結串列在不同的場景下各有優勢。在選擇使用時,需要根據具體的需求來權衡它們的特點。
    以下是關於陣列和連結串列的知識點總結:
    一、陣列
  9. 定義:
    • 一組具有相同資料型別的元素按順序儲存在連續的記憶體空間中。
  10. 特點:
    • 隨機訪問:可以透過下標在常數時間內訪問任意元素。例如,訪問陣列中的第 n 個元素非常高效。
    • 長度固定:建立陣列時需要指定長度,一旦確定,在程式執行過程中通常難以改變。
    • 記憶體連續:儲存在連續的記憶體空間,有利於 CPU 的快取機制,提高訪問速度。
  11. 操作:
    • 插入元素:在末尾插入相對容易,但在中間插入需要移動大量元素,時間複雜度為 O(n)。
    • 刪除元素:類似插入,在中間刪除也需要移動大量元素,時間複雜度為 O(n)。
  12. 應用場景:
    • 適合頻繁隨機訪問的情況,如儲存一組已知數量的元素。
    二、連結串列
  13. 定義:
    • 由一系列節點組成,每個節點包含資料和指向下一個節點的指標(對於雙向連結串列,還有指向前一個節點的指標)。
  14. 特點:
    • 動態長度:可以根據需要動態地增加或刪除節點,無需預先指定長度。
    • 非連續儲存:節點分散在記憶體中,透過指標連線。
    • 插入和刪除高效:只需修改指標即可完成插入和刪除操作,時間複雜度為 O(1)(在已知插入或刪除位置的情況下)。
  15. 操作:
    • 插入元素:在連結串列頭部、尾部或中間插入都相對容易,只需調整指標。
    刪除元素:同樣,透過調整指標即可刪除節點。
  16. 應用場景:
    • 頻繁進行插入和刪除操作的情況。
    • 對於記憶體空間有限且不確定元素數量的情況也很適用。
    總之,陣列和連結串列在不同的場景下各有優勢。在選擇使用時,需要根據具體的需求來權衡它們的特點。
    以下是關於子程式與引數的知識點:
    一、子程式
  17. 定義:
    • 子程式是一段可以獨立完成特定任務的程式程式碼模組。也被稱為函式、方法等。
  18. 特點:
    • 程式碼複用:可以在不同的地方多次呼叫同一個子程式,避免重複編寫相同的程式碼,提高開發效率。
    • 模組化:將複雜的程式分解為多個小的子程式,每個子程式負責一個特定的功能,使程式結構更加清晰,易於維護和修改。
  19. 作用:
    • 封裝功能:將特定的操作封裝在子程式中,隱藏實現細節,只對外提供介面,提高程式的安全性和可維護性。
    • 提高可讀性:透過使用有意義的子程式名稱,可以使程式更易於理解和閱讀。
    二、引數
  20. 定義:
    • 引數是在呼叫子程式時傳遞給子程式的資料。它可以影響子程式的執行結果。
  21. 分類:
    • 形式引數(形參):在子程式定義中宣告的引數,用於接收實際引數的值。
    • 實際引數(實參):在呼叫子程式時傳遞給形參的值。
  22. 作用:
    • 傳遞資料:透過引數,可以將不同的資料傳遞給子程式,使子程式能夠根據不同的輸入進行不同的處理。
    • 增加靈活性:引數使得子程式可以適應不同的情況,提高子程式的通用性。
  23. 傳遞方式:
    • 值傳遞:將實參的值複製一份傳遞給形參,在子程式中對形參的修改不會影響實參的值。
    • 引用傳遞:將實參的地址傳遞給形參,在子程式中對形參的修改會影響實參的值。
    總之,子程式和引數是程式設計中非常重要的概念。合理地使用子程式和引數可以提高程式的可讀性、可維護性和可擴充套件性。

教材學習中的問題和解決過程(先問 AI)

問題1:列出計算機問題求解模型的階段
問題1解決方案:計算機問題求解模型通常包括以下幾個階段:
一、問題定義階段

  1. 明確問題:清晰地理解問題的本質、目標和約束條件。確定問題的輸入和輸出要求。
  2. 收集資訊:收集與問題相關的背景資訊、資料和資源。瞭解問題所處的領域和相關技術。
    二、分析階段
  3. 分解問題:將複雜問題分解為較小的子問題,使其更易於管理和解決。
  4. 確定解決方案策略:根據問題的特點和需求,選擇合適的解決方案策略,如演算法、資料結構等。
  5. 進行可行性分析:評估所選擇的解決方案在技術、時間和資源等方面的可行性。
    三、設計階段
  6. 設計演算法:根據分析階段確定的解決方案策略,設計具體的演算法來解決問題。演算法應具有正確性、高效性和可讀性。
  7. 選擇資料結構:根據問題的需求和演算法的特點,選擇合適的資料結構來儲存和處理資料。
  8. 設計程式結構:規劃程式的整體結構,包括模組劃分、函式介面和控制流程等。
    四、實現階段
  9. 編寫程式碼:根據設計階段的結果,使用選定的程式語言編寫程式程式碼。
  10. 進行測試:對編寫的程式碼進行測試,包括單元測試、整合測試和系統測試等,以確保程式的正確性和穩定性。
  11. 除錯程式:在測試過程中,發現並修復程式中的錯誤和缺陷。除錯可以使用除錯工具和技術,如斷點除錯、日誌記錄等。
    五、評估階段
  12. 評估解決方案:對解決問題的方案進行評估,包括演算法的效率、程式的效能、可維護性和可擴充套件性等方面。
  13. 進行最佳化:根據評估結果,對解決方案進行最佳化,以提高程式的質量和效能。
  14. 總結經驗:總結解決問題的過程和經驗教訓,為今後的問題求解提供參考。

基於AI的學習

程式碼除錯中的問題和解決過程

程式碼託管

(statistics.sh指令碼的執行結果截圖)

上週考試錯題總結

其他(感悟、思考等,可選)

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 2/4 18/38
第三週 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟體工程軟體的估計為什麼這麼難軟體工程 估計方法

  • 計劃學習時間:XX小時

  • 實際學習時間:XX小時

  • 改進情況:

(有空多看看現代軟體工程 課件
軟體工程師能力自我評價表
)

參考資料

  • 《電腦科學概論(第七版)》
  • ...

相關文章