【數據結構C語言】順序表

1. 線性表

????????線性表(linear list)是n個具有相同特性的數據元素的有限序列。 線性表是一種在實際中廣泛使用的數據結構,常見的線性表:順序表、鏈表、棧、隊列、字符串...線性表在邏輯上是線性結構,也就說是連續的一條直線。但是在物理結構上并不一定是連續的, 線性表在物理上存儲時,通常以數組和鏈式結構的形式存儲。

2. 順序表

2.1 概念與結構

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

?順序表和數組的關系是什么?

順序表的底層就是數組,順序表是用數組來實現的,兩種創建數組的方式:

2.2 分類

2.2.1?靜態順序表

概念:使用定長數組存儲元素

2.3 動態順序表的實現

void SLInit(SL* ps) {ps->arr = NULL;ps->size = ps->capacity = 0;
}

傳值和傳址操作?

?順序表初始化:

void SLInit(SL* ps) {ps->arr = NULL;ps->size = ps->capacity = 0;
}

尾插法

擴容realloc操作:?

//尾插
void SLPushBack(SL* ps, SLTDataType x) {if (ps->size == ps->capacity) { // 空間不夠,擴容int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLTDataType* tmp = (SLTDataType *)realloc(ps->arr, sizeof(SLTDataType) * newCapacity);if (tmp == NULL) {perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}//空間足夠ps->arr[ps->size++] = x;
}

利用調試的監視窗口,監視變量的值從而進行調試。按F5調試,按F5+Ctrl,直接運行,按F10一行行調試,但不進入函數內部,按F11進入函數內部。

頭插法:時間復雜度o(n)

// 頭插法
void SLPushFront(SL* ps, SLTDataType x)
{assert(ps);SLCheckCapacity(ps);for (int i = ps->size; i > 0; i--) {ps->arr[i] = ps->arr[i-1];}ps->arr[0] = x;ps->size++;
}

?尾刪法:時間復雜度o(1)

// 尾刪法
void SLPopBack(SL* ps) {assert(ps && ps->size);ps->size--;
}

頭刪法:o(n)

// 頭刪法
void SLPopFront(SL* ps) {assert(ps && ps->size);//數據整體向前挪動一位for (int i = 0; i < ps->size-1; i++) {ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

指定位置之前插入:o(n)

// 指定位置之前插入
void SLInsert(SL* ps, int pos, SLTDataType x) {assert(ps);assert(pos >= 0 && pos < ps->size);SLCheckCapacity(ps);for (int i = ps->size; i > pos; i--) {ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;
}

刪除pos位置的數據:

// 刪除pos位置的數據
void SLErase(SL* ps, int pos) {assert(ps);assert(0 <= pos && pos < ps->size);for (int i = pos; i < ps->size - 1; i++) {ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

銷毀順序表:

void SLDestroy(SL* ps) {if (ps->arr) {free(ps->arr);}ps->arr = NULL;ps->size = ps->capacity = 0;
}

相關算法題:

1.?移除元素

27. 移除元素 - 力扣(LeetCode)

2.?刪除有序數組中的重復項

26. 刪除有序數組中的重復項 - 力扣(LeetCode)

3.?合并兩個有序數組

88. 合并兩個有序數組 - 力扣(LeetCode)

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

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

相關文章

AI 學習路徑-記錄分享

目錄推薦學習資源延申閱讀推薦學習資源 3Blue1Brown的個人空間-3Blue1Brown個人主頁-嗶哩嗶哩視頻 這個簡短的課程有助于了解AI的本質&#xff0c;邁入學習AI的第一步。 歡迎加入 &#x1f917; AI Agents 課程 - Hugging Face Agents Course AI Agent&#xff0c;當前火爆…

Windows Server 2019 上安裝 Ubuntu 20.04 的幾種方式

docker desktop不支持Windows server 2019&#xff0c;所以Windows Server 2019 上安裝 Ubuntu 20.04 變成一種可行的途徑。記錄一下其中可用的幾種方式&#xff1a;&#x1f5c2; 常見安裝方式對比方式原理難度適用場景優點缺點Hyper?V 虛擬機&#xff08;推薦&#xff09;利…

當Trae遇上高德MCP:一次國慶武漢之旅的AI技術實踐

當Trae遇上高德MCP&#xff1a;一次國慶武漢之旅的AI技術實踐 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是我…

設計模式:抽象工廠模式

簡介 抽象工廠模式(Abstract Factory Pattern)是一種創建型設計模式,它提供了一種封裝一組具有共同主題或相關依賴關系的獨立工廠的方式,而無需指定它們的具體類。核心思想是創建一系列相關或相互依賴的對象家族(產品族),可以將客戶端與具體產品的創建過程解耦,使得客…

知行——同為科技24周年慶典

在宜人的金秋時節&#xff0c;北京同為科技有限公司于2025年8月23日&#xff0c;天津基地與江西同時隆重舉辦了以“知行”為主題的周年慶祝活動&#xff0c;回顧企業24年來的奮斗歷程&#xff0c;凝聚“同為人”力量&#xff0c;展望更加光明的未來。當天&#xff0c;創始人周慧…

RK android14 定制ES8388音頻編解碼器雙MIC雙OUT(1)

文章目錄 前言 一、適配內容概述 二、適配步驟 1. HAL層配置修改 1.1 添加聲卡名稱識別 (`audio_hw.c`) 1.2 注冊聲卡路由配置 (`config_list.h`) 1.3 定義路由配置表 (`es8388_config.h`) 2. 內核設備樹修改 2.1 禁用默認聲卡 2.2 配置ES8388聲卡節點 2.3 配置I2C和Codec節點 …

Oracle跟蹤及分析方法

1、SQL_TRACE 通過設置 SQL_TRACE 可以啟用或禁用 SQL 跟蹤工具&#xff0c;設置 SQL_TRACE 為 true 可以收集信息用于性能優化或問題診斷&#xff1b; 特別注意&#xff1a; 全局啟用 SQL 跟蹤可能會對性能產生嚴重影響。 可以使用 ALTER SESSION 跟蹤特定會話。 Oracle 已…

第三階段數據庫-9:循環,編號,游標,分頁

1_sql中的循環&#xff0c;編號&#xff08;1&#xff09;sql 中沒有for循環&#xff0c;只有while循環&#xff0c;begin end 中間的就是while執行的語句&#xff0c;相當于{}declare i int; set i1; --begin end 中間的就是while執行的語句&#xff0c;相當于{} while(i<…

Redis高級篇:在Nginx、Redis、Tomcat(JVM)各環節添加緩存以實現多級緩存

摘要&#xff1a;多級緩存通過在 Nginx、Redis、Tomcat&#xff08;JVM&#xff09;各環節添加緩存&#xff0c;解決傳統緩存中 Tomcat 瓶頸與 Redis 失效沖擊數據庫問題。利用 Caffeine 實現 JVM 緩存&#xff0c;OpenResty 結合 Lua 處理 Nginx 層邏輯&#xff0c;通過 Redis…

9 設計網絡爬蟲

前言 我們重點討論網絡爬蟲的設計&#xff0c; 這也是一個有趣且經典的系統設計面試問題。 爬蟲開發的復雜性取決于我們想要支持的爬蟲規模。它可以是一個小的學校項目&#xff0c;只需要幾小時就可以完成&#xff0c;也可以是一個需要專業開發團隊持續優化的巨型項目。因此&…

面試:計算機網絡

一、網絡分層與URL流程 1. 模型掌握TCP/IP四層模型&#xff1a;層級功能 & 協議應用層提供應用接口&#xff08;HTTP、DNS、FTP&#xff09;傳輸層端到端傳輸&#xff08;TCP可靠、UDP快速&#xff09;網絡層路由與尋址&#xff08;IP、ICMP&#xff09;網絡接口層鏈路傳輸…

lanczos算法的核心——Ritz向量的計算(主要思想為反向映射)

在 Lanczos 算法中&#xff0c;“將得到的特征向量映射回原始空間&#xff08;即乘以V&#xff09;得到的近似特征向量” 這一步&#xff0c;通常是指在三對角矩陣&#xff08;T&#xff09;的特征向量求解完成后&#xff0c;將其轉換回原始矩陣&#xff08;A&#xff09;的特征…

Verilog功能模塊--SPI主機和從機(03)--SPI從機設計思路與代碼解析

前言 上一篇文章介紹了Verilog功能模塊——SPI主機&#xff0c;包括主機設計思路與使用方法。 本文則用純Verilog設計了功能完整的4線SPI從機&#xff0c;與網上一些以高頻率clk時鐘模擬從機不同&#xff0c;本文中的SPI從機工作時鐘來源于主機的sclk&#xff0c;符合SPI同步…

【Big Data】Hadoop YARN 大數據集群的 “資源管家”

Apache Hadoop YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Hadoop生態系統中的核心資源管理框架&#xff0c;通過解耦資源管理和任務調度&#xff0c;提供了一個通用的分布式計算資源調度平臺&#xff0c;使Hadoop從單一的MapReduce框架演進為支持多種計算…

【計組】總線與IO

總線同步定時方式采用公共時鐘信號協調發送方和接收方的傳送異步定時方式采用握手信號來實現定時控制不互鎖對于主設備&#xff1a;請求&#xff0c;隔一段時間自動撤銷請求對于從設備&#xff1a;回答&#xff0c;隔一段時間自動撤銷回答半互鎖對于主設備&#xff1a;請求&…

技術速遞|Model Context Protocol (MCP) 支持已上線 JetBrains、Eclipse 和 Xcode

模型上下文協議&#xff08;MCP&#xff09;與 GitHub Copilot 的集成現已全面支持 JetBrains、Eclipse 和 Xcode&#xff01;MCP 使 GitHub Copilot 能夠與外部工具和數據源集成&#xff0c;從而提升更深入的上下文感知能力和編碼智能。 借助 JetBrains、Eclipse 和 Xcode 中…

深入淺出理解支持向量機:從原理到應用,解鎖分類算法的核心密碼

????在機器學習的廣闊領域中&#xff0c;分類算法猶如一個個精準的 “決策官”&#xff0c;幫助我們從海量數據中挖掘規律、做出判斷。而在眾多分類算法里&#xff0c;支持向量機&#xff08;Support Vector Machine&#xff0c;簡稱 SVM&#xff09;憑借其出色的泛化能力、…

相關法律、法規知識(五)

一、著作權法&#xff1a;軟件知識產權風險條款核心要求召回風險場景軟件著作權歸屬&#xff08;11&#xff09;委托開發軟件無書面合同 → 著作權歸受托方代工生產的設備預裝未授權軟件 → 侵權訴訟 → 強制下架召回&#xff08;如工業PDA盜用第三方代碼&#xff09;侵權行為&…

PWM控制實現呼吸燈

一.呼吸燈原理 呼吸燈指燈光的亮度隨著時間由暗到亮逐漸增強&#xff0c;再由亮到暗逐漸衰減&#xff0c;很有節奏感地一起一伏&#xff0c;就像是在呼吸一樣&#xff0c;被廣泛應用于手機、電腦、電視等電子設備的指示燈中。 通過調節PWM占空比實現呼吸燈效果。通過調節定…

MySQL LIKE查詢終極指南:模糊匹配的利刃與性能深淵

引言 LIKE是MySQL中最強大的模糊匹配操作符&#xff0c;也是性能陷阱最多的查詢之一。本文將系統解析其高效使用方法&#xff0c;通過實測數據揭示不同場景下的性能表現&#xff0c;并提供企業級優化方案。一、基礎語法與通配符解析 1.1 四種匹配模式詳解 -- 前綴匹配&#xff…