數據結構 順序表(1)

目錄

1.線性表

2.順序表

1.線性表

線性表(linear list)是n個具有相同特性的數據元素的有限序列。線性表是一種在實際中廣泛使用

的數據結構,常見的線性表:順序表、鏈表、棧、隊列、字符串…

線性表在邏輯上是線性結構,也就是說是連續的一條直線。但是在物理結構上并不一定是連續的,

線性表在物理上存儲時,通常以數組和鏈式結構的形式存儲。

線性表在數據結構中有著重要的作用, 線性表在數據結構里,是搭建知識體系的“基石”,也是解決

實際線性數據問題的“實用工具箱”,學好它對掌握更深入的數據結構和算法知識,有著“牽一發而動

全身”的關鍵價值。

而本篇我們將要學習存儲數據的第一種結構,也就是線性表中的順序表:

2.順序表

2.1 概念和結構

概念:順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,一般情況下采用

存儲。

它的結構如下:

2.2 分類

2.2.1 靜態順序表

-靜態順序表:使用定長數組來存儲數據元素的順序表。在C語言中,一般通過預先定義好長度的數

組來實現,并且會用一個變量記錄當前已存儲的有效數據個數 。例如:

2.2.2 動態順序表

動態順序表:基于動態內存分配(如C語言中的 malloc 和 free )來管理存儲空間的順序表。它包

含一個指向動態分配內存空間的指針,同時會記錄當前已存儲的數據個數以及整個順序表的容量。

當數據元素增加導致空間不足時,可以通過重新分配內存(如 realloc )來擴大存儲空間。示例代

碼如下

區別:

存儲空間分配:

- 靜態順序表:在編譯時就確定了數組的大小,其占用的內存空間是固定的。一旦定義,在程序運

行過程中無法改變數組的長度。

- 動態順序表:初始時分配一定大小的內存空間,在使用過程中,根據實際需求(如插入元素時發

現空間不足),通過動態內存分配函數來增加或減少內存空間,具有更好的靈活性。

空間利用率:

- 靜態順序表:如果預先分配的空間過大,會造成內存浪費;若分配空間過小,在數據量超出時又

無法存儲更多數據,容易導致溢出錯誤 。例如定義了長度為100的靜態順序表,但實際只存儲10個

數據,就浪費了90個數據單元的空間。

- 動態順序表:根據實際數據量動態調整內存空間,能更合理地利用內存資源。不過,動態內存分

配和重新分配操作也會帶來一定的額外開銷(如頻繁調用?realloc?)。

插入和刪除操作的復雜度(涉及擴容情況):

- 靜態順序表:插入和刪除操作時,如果不涉及數組越界,時間復雜度主要是移動元素的開銷,平

均時間復雜度為 O(n) 。但如果在插入時數組已滿,就無法完成操作,需要提前預估足夠大的空

間。

- 動態順序表: 在空間足夠的情況下,插入和刪除操作與靜態順序表類似,平均時間復雜度為 O(n)

。而當空間不足需要擴容時,除了移動元素的開銷,還需要進行動態內存分配(如用?realloc?),

雖然單次擴容操作時間復雜度較高,但均攤到每次插入操作上,平均時間復雜度仍接近 O(1) (采

用均攤分析) 。

實現復雜度:

- 靜態順序表:實現相對簡單,不需要處理動態內存分配、釋放以及擴容等復雜邏輯,代碼編寫和

理解起來相對容易。

- 動態順序表:需要處理動態內存的申請、釋放以及在空間不足時的擴容操作,實現過程相對復

雜,同時還要注意內存泄漏等問題(如忘記釋放不再使用的內存)。

綜上所述,通過靜態表和動態表的對比區別,我們可以得出動態表更加全面,在寫代碼的過程中也

更加復雜。所以我們下面學習的順序表是圍繞著動態順序表展開的

感謝大家的觀看,? 下篇文章,我們將講述關于順序表的實現,也是關于順序表最重要的內容。

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

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

相關文章

openssl 生成國密證書

openssl生成證書生成CA私鑰 openssl ecparam -genkey -name SM2 -out ca.key.pem -noout證書請求 openssl req -new -key ca.key.pem -out ca.cert.req -subj “/CNrtems-strongswan-CA”生成證書 openssl x509 -req -days 3650 -in ca.cert.req -signkey ca.key.pem -out ca.c…

系統架構設計師論文分享-論分布式事務技術及其應用

我的軟考歷程 摘要 2023年9月,我所在的公司通過了研發紗線MES系統的立項,該系統為國內紗線工廠提供SAAS服務,旨在提高紗線工廠的數字化和智能化水平。我在該項目中擔任系統架構設計師一職,負責該項目的架構設計工作。本文結合我…

東土科技智能塔機系統亮相南京,助力智能建造高質量發展

近日,由南京市城鄉建設委員會、江蘇省土木建筑學會主辦的“無人駕駛智能塔機觀摩會”,在中建三局一公司南京揚子江智慧中心項目現場成功舉辦。作為全國首批智能建造試點城市,南京市已出臺20余項支持政策,落地93個試點項目&#xf…

3D Surface Reconstruction with Enhanced High-Frequency Details

3D Surface Reconstruction with Enhanced High-Frequency Details核心問題:當前基于神經隱式表示(如 NeuS)的 3D 表面重建方法,通常采用隨機采樣策略。這種隨機采樣難以充分捕捉圖像中的高頻細節區域(如紋理、邊緣、光…

Science Robotics 耶魯大學開源視觸覺新范式,看出機器人柔性手的力感知

摘要:在機器人視觸覺傳感領域,如何兼顧成本與性能始終是一大挑戰。耶魯大學在《Science Robotics》上發表最新研究,提出了一種“Forces for Free”(F3)新范式。該研究通過觀測一個經過特殊優化的開源柔性手&#xff08…

關于java項目中maven的理解

我的理解:maven是java項目的依賴管理工具,通過pom.xml文件配置要下載的依賴,settings.xml配置maven下載的鏡像沒有就默認在maven中央倉庫下載依賴,本地倉庫是存儲下載好的依賴ai:1. 功能定位局限Maven 不只是依賴管理工具&#xf…

緩存三大問題詳解與工業級解決方案

文章目錄緩存三大問題詳解與工業級解決方案概念總覽問題詳解1. 緩存穿透 (Cache Penetration)問題描述典型場景危害2. 緩存擊穿 (Cache Breakdown)問題描述典型場景危害3. 緩存雪崩 (Cache Avalanche)問題描述典型場景危害工業級解決方案緩存穿透解決方案方案1: 布隆過濾器方案…

FreeRTOS 中主函數 while 循環與任務創建的緊密聯系

FreeRTOS 中主函數 while 循環與任務創建的緊密聯系 在嵌入式開發領域,FreeRTOS 是一款被廣泛應用的輕量級實時操作系統,為開發者提供了高效的多任務調度機制。對于初學者來說,理解主函數中的 while 循環與通過 xTaskCreate 創建的任務之間的…

Flutter基礎(前端教程⑦-Http和卡片)

1. 假設后端返回的數據格式{"code": 200,"data": [{"name": "張三","age": 25,"email": "zhangsanexample.com","avatar": "https://picsum.photos/200/200?random1","statu…

pytorch chunk 切塊

目錄 chunk切塊 chunk???????切塊 import torch# 創建一個形狀為 [2, 3, 4] 的張量 x torch.arange(6).reshape(2, 3) print("原始張量形狀:", x.shape) print("x:", x) # 輸出: 原始張量形狀: torch.Size([2, 3, 4])# 沿著最后一個維度分割成 2 …

PCIe基礎知識之Linux內核中PCIe子系統的架構

5.1 先驗知識 驅動模型:Linux建立了一個統一的設備模型,分別采用總線、設備、驅動三者進行抽象,其中設備和驅動均掛載在總線上面,當有新的設備注冊或者新的驅動注冊的時候,總線會進行匹配操作(match函數),…

2.2 TF-A在ARM生態系統中的角色

目錄2.2.1 作為ARM安全架構的參考實現2.2.2 與ARM處理器內核的協同關系2.2.3 在啟動鏈中的核心地位2.2.4 與上下游軟件的關系與底層固件的協作與上層軟件的接口2.2.5 在ARM生態系統中的標準化作用2.2.6 典型應用場景2.2.1 作為ARM安全架構的參考實現 TF-A(Trusted …

Chrome 開發者警告:`DELETE err_empty_response` 是什么?jQuery AJAX 如何應對?

在Web開發的世界里,我們時常會遇到各種各樣的錯誤信息,它們像一個個謎語,等待我們去破解。今天我們要聊的這個錯誤——DELETE err_empty_response,尤其是在使用 jQuery 的 $.ajax 發送 DELETE 請求時遇到,確實讓人頭疼。它意味著瀏覽器嘗試刪除某個資源,卻收到了一個空蕩…

python作業 1

1.技術面試題 (1)TCP與UDP的區別是什么? 答: TCP建立通信前有三次握手,結束通信后有四次揮手,數據傳輸的可靠性高但效率較低;UDP不需要三次握手就可傳輸數據,數據傳輸完成后也不需要…

centos7 java多版本切換

文章目錄前言一、卸載原來的jdk二、下載jdk三、解壓jdk三、配置環境變量四、切換JAVA環境變量前言 本來是為了安裝jenkins,安裝了對應的java,node,maven,git等環境,然后運行jenkins時候下載插件總是報錯,我下載的jenkins是 2.346.1 版本&…

用Python和OpenCV從零搭建一個完整的雙目視覺系統(四)

本系列文章旨在系統性地闡述如何利用 Python 與 OpenCV 庫,從零開始構建一個完整的雙目立體視覺系統。 本項目github地址:https://github.com/present-cjn/stereo-vision-python.git 在上一篇文章中,我們完成了相機標定這一最關鍵的基礎步驟…

STM32-中斷

中斷分為兩路:12345用于產生中斷;678產生事件外設為NVIC設計流程:使能外設中斷設置中斷優先級分組初始化結構體編寫中斷服務函數初始化結構體:typedef struct {uint8_t NVIC_IRQChannel; 指定要使能或禁用的中斷通道例如: TIM3_I…

Shader面試題100道之(61-80)

Shader面試題(第61-80題) 以下是第61到第80道Shader相關的面試題及答案: 61. 什么是UV展開?它在Shader中有什么作用? UV展開是將3D模型表面映射到2D紋理空間的過程,用于定義紋理如何貼合模型。在Shader中&a…

C#基礎:Winform桌面開發中窗體之間的數據傳遞

1.主窗體using System; using System.Windows.Forms;public partial class MainForm : Form {public MainForm(){InitializeComponent();}// 打開二級窗體private void btnOpenSecondaryForm_Click(object sender, EventArgs e){// 創建二級窗體并訂閱事件SecondaryForm second…

工程改Mvvm

導入CommunityToolKit vs2017只能導入7 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input;namespace WpfApp1.vi…