小杰數據結構(one day)——心若安,便是晴天;心若亂,便是陰天。

1.數據結構

計算機存儲、組織數據的方式;

有特定關系的數據元素集合;

研究數據的邏輯結構、物理結構(真實存在)和對應的算法

新結構仍保持原結構類型;

選擇更高的運行或存儲效率的數據結構。

邏輯結構——面向問題

物理結構面向計算機

基本目標是將數據及其邏輯關系存儲到計算機的內存中

(1)基本概念

數據——數據對象——數據元素(節點-鏈表中常出現)-整體處理——數據項(數據最小單位)

(2)邏輯結構

1.集合結構

2.線性結構

3.樹狀結構(層次結構)

4.圖形結構(網狀結構)

(3)物理結構

①順序存儲結構

數據元素/節點存放在地址連續的存儲單元里

1.內存連續

2.相對于鏈式存儲結構每個元素占用空間少

②鏈式存儲結構

數據元素/節點存放在任意的內存空間內,通過指針域來表示、連接

1.內存不連續

2.通過指針連接

③索引存儲結構

存儲數據同時,建立一個附加索引表(如通訊錄)

1.索引速度快

2.多了一張索引表,占用內存多

3.刪除數據文件時需及時更改索引表

④散列存儲結構

構造相應散列函數,由散列函數值來確定? 數據元素/節點? 存放的地址

1.存時需按對應關系存

2.取時也按對應關系取

2.算法

(1)概念

軟件 = 程序 + 文檔

程序 = 數據結構 + 算法

軟件 = 數據結構 + 算法 + 文檔

算法 = 對結點集合的運算和操作 + 控制結構

軟件、程序、算法——逐層包含關系

算法用來描述特定問題的求解步驟,指令有限序列,每個指令代表一個及以上操作

(2)五大特征

1.有窮性

? ? ? ? 算法必須在有窮時間內完成

2.確切性

? ? ? ? 指令必須有確切含義,不可有二義性。為True或False

3.可行性

? ? ? ? 算法可行,算法中描述的操作都可實現

4.輸入性

? ? ? ? 可輸入,以刻畫對象的初始情況

5.輸出性

? ? ? ? 必須有一個或多個輸出

(3)描述

算法的描述樣式多樣化,常用有四種。

1.自然語言描述法:

? ? ? ? 最簡單的描述法

? ? ? ? 優點:簡單、便于理解

? ? ? ? 缺點:不夠嚴謹、易產生歧義。

2.算法框圖法:

? ? ? ? 使用算法描述工具描述算法(如程序流程圖)

? ? ? ? 特點:便于理解交流、簡潔明了

3.偽代碼語言描述法:

? ? ? ? 介于高級程序設計語言與自然語言之間

? ? ? ? 忽略了一些嚴格的語法規則與描述細節

? ? ? ? 比高級程序設計語言更容易描述和被人所理解

4.高級程序設計語言描述法:

? ? ? ? 可在計算機中執行的程序描述算法

? ? ? ? 優點:不用轉換,可直接編譯執行

? ? ? ? 缺點:比較難理解

所謂“程序”是指對所要解決問題的各個對象和處理規則的描述,或者說是數據結構和算法的描述,因此有人說“數據結構+算法 = 程序”。

程序可以不滿足算法的有窮性(如,操作系統)

(4)標準

衡量一個算法的四個標準:

1.正確性

????????能夠正常運行,且得到正確答案

2.可讀性

? ? ? ? 便于閱讀、理解和交流

3.健壯性

? ? ? ? 當輸入不合法時,算法能做出相關處理。

4.時間效率高與、低存儲量需求

? ? ? ? 執行時間少,耗內存少

(5)時間復雜度

????????一個算法的復雜性分析主要是對算法效率的分析,運行速度的時間效率,以及其運行時所需要占用的空間大小。

????????算法的時間復雜度是一個函數,它定性描述該算法的運行時間,時間復雜度常用 O 表述。

①概念

要想計算時間復雜度首先得找到該算法中的循環,算法中循環執行的次數就是算法的時間復雜度。

函數表達式:

? ? ? ? T(n) = O(f(n))

T(n) 問題規模的時間函數

n 代表的是問題的規模 輸入數據量的大小

O 時間數量級

f(n) 算法中可執行語句重復執行的次數

由此可得計算時間復雜度的一般規律(大O表示法),如:N*N+N+10

  1. 如果有常數項將其置為1N*N+N+1
  2. 去除表達式中所有加法常數。 N*N+N
  3. 修改的表達式中 只保留最高階項,因為只有它才會對最終結果產生影響。 N*N
  4. 如果最高階項系數存在且不是1,則將其系數變為1,得到最后的表達式。 N*N

計算冒泡排序的時間復雜度:

? ? ? ? Sn = [n*(a1+a2)]/2

3.順序表

每種結構都有存在的意義

線性表的特點:一對一,每個節點最多一個前驅和一個后繼,首尾節點特殊:首節點無前驅,尾節點無后繼。

邏輯結構:線性結構

物理結構:順序存儲結構

def show(buf: list[int]):

????????遍歷列表中的有效元素

last:

? ? ? ? 始終標記列表中最后一個有效元素下標

? ? ? ? 用global修飾

例:

????????練習:自己實現insert()思想

?????????????????列表:buf = [1, 996, 520, 4, 5]

????????????????要求:第三個位置插入一個元素

def insert(buf, index, data):''':param buf:列表的首地址:param index:插入的位置:param data:給列表中插入的數據:return:'''for i in range(len(buf) - 1, index, -1):# 防止越界buf[i] = buf[i - 1]buf[index] = datadef show(buf):for i in range(len(buf)):print("buf[%s] = %s" % (i, buf[i]))if __name__ == '__main__':buf = [1, 520, 996, 4, 5]show(buf)insert(buf, 3, 888)show(buf)
last版本:
# 始終標記列表中最后一個有效元素的下標
last = 4def insert(buf, index, data):''':param buf:列表的首地址:param index:插入的位置:param data:給列表中插入的數據:return:'''global lastfor i in range(last, index - 1, -1):  # last 0 index = 5 ;index + 1# 防止越界buf[i + 1] = buf[i]buf[index] = datalast = last + 1def show(buf):for i in range(last + 1):print("buf[%s] = %s" % (i, buf[i]))if __name__ == '__main__':buf = [1, 520, 996, 4, 5] + [0] * 16show(buf)insert(buf, 3, 888)show(buf)

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

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

相關文章

力扣面試150(44/150)

7.30 155. 最小棧 設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂…

Linux實戰:從零搭建基于LNMP+NFS+DNS的WordPress博客系統

前言 在數字化時代,擁有一個個人博客是技術愛好者展示成果、分享經驗的重要方式。本文將帶您從零開始,在Linux環境下通過兩臺服務器協作,搭建一個功能完整的WordPress博客系統。我們將整合LNMP架構、NFS文件共享和DNS域名解析服務&#xff0c…

Apache Ignite 的對等類加載(Peer Class Loading, P2P Class Loading)機制

這段內容是關于 Apache Ignite 的“對等類加載”(Peer Class Loading, P2P Class Loading)機制的詳細說明。這是 Ignite 為了簡化開發而設計的一個非常強大的功能,但同時也存在一些安全和性能上的考量。 下面我將用通俗易懂的語言 結構化解…

預過濾環境光貼圖制作教程:第四階段 - Lambert 無權重預過濾(Stage 3)

在完成高光反射的 GGX 預過濾后,我們還需要處理環境光的漫反射部分。本階段(Stage 3)將基于 Lambert 分布對環境貼圖進行無權重預過濾,生成用于漫反射計算的環境數據。與高光反射的方向性不同,漫反射是光線在粗糙表面的均勻散射,因此需要用更適合均勻分布的 Lambert 模型…

Spring與SpringBoot:從手動擋到自動擋的Java開發進化論

大家好!我是程序員良辰,今天我們來聊聊Java開發界的兩位"重量級選手":Spring 和 SpringBoot。它們之間的關系就像手動擋汽車和自動擋汽車——一個給你完全的控制權但操作復雜,一個讓你輕松上路但保留了切換手動模式的能…

1.4.Vue 的模板事件

Vue 的模板事件1. 最常見和推薦的做法。將復雜的邏輯封裝在 methods 中。<!-- ? 正確&#xff1a;調用 methods 中的方法 --> <button click"handleClick">點擊我</button>new Vue({methods: {handleClick(event) {// 這里可以寫任意語句if (this…

SQLite 子查詢詳解

SQLite 子查詢詳解 引言 SQLite 是一種輕量級的數據庫&#xff0c;以其簡單、易用和跨平臺而著稱。在數據庫查詢中&#xff0c;子查詢是一個非常重要的概念&#xff0c;它允許我們在查詢中使用查詢結果。本文將詳細講解 SQLite 中的子查詢&#xff0c;包括其定義、用法以及在實…

可以組成網絡的服務器 - 華為OD統一考試(JavaScript 題解)

題目描述 在一個機房中,服務器的位置標識在n*m的整數矩陣網格中,1表示單元格上有服務器,0表示沒有。如果兩臺服務器位于同一行或者同一列中緊鄰的位置,則認為它們之間可以組成一個局域網,請你統計機房中最大的局域網包含的服務器個數。 輸入描述 第一行輸入兩個正整數,…

redis,MongoDB等未授權訪問靶場復現

redis未授權訪問在docker中啟動vulhub對應的靶場目錄&#xff1a;cd /vulhub-master/redis/4-unacc在kali上安裝redis程序進行服務連接安裝redis apt-get install redis redis鏈接 redis-cli -h IP -p 端口輸入info可以查看信息接下來我們使用redis-rogue-server來獲取命令執行…

設計模式:代理模式 Proxy

目錄問題解決方案結構代碼代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在將請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f; 舉個例子&#xff1a; 有這樣一…

Linux零基礎Shell教學全集(可用于日常查詢語句,目錄清晰,內容詳細)(自學尚硅谷B站shell課程后的萬字學習筆記,附課程鏈接)

此文章為學習了 尚硅谷B站課程 后的學習筆記 【尚硅谷】Shell腳本從入門到實戰_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1hW41167NW/?spm_id_from333.337.search-card.all.click&vd_source68e0bbe20c8b1102b59ced40f67db628注意&#xff1a;需要先學Linux基礎…

GitLab 中的分支和標簽的定義及操作

&#xff08;一&#xff09;GitLab 中的分支和標簽的定義及操作 1. 分支&#xff08;Branch&#xff09; 定義&#xff1a; 分支是代碼倉庫中的獨立開發路徑&#xff0c;允許你在不影響主線&#xff08;通常是 main 或 master 分支&#xff09;的情況下&#xff0c;進行實驗、開…

第2章 cmd命令基礎:常用基礎命令(3)

Hi~ 我是李小咖&#xff0c;主要從事網絡安全技術開發和研究。 本文取自《李小咖網安技術庫》&#xff0c;歡迎一起交流學習&#x1fae1;&#xff1a;https://imbyter.com 本節介紹的命令有顯示系統信息&#xff08;systeminfo&#xff09;、啟動指定程序&#xff08;start&am…

RabbitMQ 發送方確認的兩大工具 (With Spring Boot)

核心概念解析 發布者確認機制的核心思想是&#xff1a;將消息投遞的可靠性從“盡力而為”提升為“契約保證”。生產者不再是“發后不理”&#xff0c;而是與 Broker 建立一個雙向的溝通渠道。 在 Spring AMQP 的封裝下&#xff0c;這個機制主要由兩個回調接口實現&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API網關&#xff09;時&#xff0c;理解其核心概念是掌握其工作原理的基礎。這些概念既體現了Kong的設計哲學&#xff0c;也決定了它如何適配復雜的API管理場景&#xff08;如微服務、多團隊協作等&#xff09;。本文將系統梳理Kong的核心概…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題 摘要 在開發過程中&#xff0c;我們經常會遇到各種模塊安裝的問題&#xff0c;尤其是在使用PyCharm時&#xff0c;經常會遇到pip install時的…

3 運算符與表達式

運算符&#xff1a;對字面量或者變量進行操作的符號 表達式&#xff1a;用運算符把字面量或者變量連接起來符合java語法的式子就可以稱作表達式不同運算符連接的表達式體現的是不同類型的表達式int a 10; int b 20; int c a b;&#xff1a;運算符&#xff0c;并且是算術運算…

MySQL的單行函數:

目錄 函數的理解&#xff1a; MySQL的內置函數及分類&#xff1a; 單行函數&#xff1a; 數值函數&#xff1a; 基本函數&#xff1a; 角度與弧度互換函數&#xff1a; 三角函數&#xff1a; 指數與對數&#xff1a; 進制轉換&#xff1a; 字符串函數&#xff1a; 日…

設計模式(二十一)行為型:狀態模式詳解

設計模式&#xff08;二十一&#xff09;行為型&#xff1a;狀態模式詳解狀態模式&#xff08;State Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于允許一個對象在其內部狀態改變時改變其行為&#xff0c;使得對象看起來像是修改了它的…

深入理解 Doris Compaction:提升查詢性能的幕后功臣

在 Doris 的數據存儲與查詢體系里&#xff0c;Compaction 是保障查詢效率、優化存儲結構的關鍵機制。如果你好奇 Doris 如何在高頻寫入后仍能高效響應查詢&#xff0c;或是想解決數據版本膨脹帶來的性能問題&#xff0c;這篇關于 Compaction 的深度解析值得收藏 &#x1f447; …