【數據結構篇】順序表 超詳細

目錄

一.順序表的定義

1.順序表的概念及結構

1.1線性表

2.順序表的分類

2.1靜態順序表

2.2動態順序表?

二.動態順序表的實現

1.準備工作和注意事項

2.順序表的基本接口:

? ?2.0 創建一個順序表

? ?2.1 順序表的初始化

2.2 順序表的銷毀

2.3?順序表的打印

3.順序表的尾插和尾刪接口:

4.順序表的擴容接口:

5.順序表的頭插和頭刪接口:

6.順序表的指定位置插入和刪除接口:

7.順序表的查找接口:

?三.完整代碼

SeqList.c:?

SeqList.h:

test.c?:


一.順序表的定義

1.順序表的概念及結構

1.1線性表

2.順序表的分類

順序表的底層是數組,但和數組不一樣的是,它對數組進行了分裝,增加了增刪查改等接口

2.1靜態順序表

概念:使用定長的數組存儲元素(用存儲整型舉例)

缺陷:?空間給多了造成空間浪費,給少了空間不夠

這里我解釋一下為什么用 replace 代替 int : 這樣是方便以后修改順序表存儲別的數據類型,用N代替數組的元素個數同理,修改時更方便

2.2動態順序表?

二.動態順序表的實現

1.準備工作和注意事項

?創建3個文件:

? 第一個文件:用于接口函數和所有需要用到的庫函數頭文件的聲明,定義順序表的結構

? 第二個文件:用于對接口函數的定義

? 第三個文件:用于接口的測試

? 注意事項:建議每個函數接口寫完對其進行調試,避免最后產生大量報錯而束手無措

? ? ? ? ? ? ? ? ? ? 我在每個接口的代碼上面都添加了很多注釋,幫助各位未來的大佬增加理解哦

2.順序表的基本接口:

? ?2.0 創建一個順序表

? ?2.1 順序表的初始化

對于我為什么要先用arr來接收開辟好的空間,我本來是想著開辟失敗會影響先前開辟好的空間,但轉念一想先前本來也沒有開辟空間那,如果開辟失敗的還用arr接收還是直接用結構體成員指針接收都一樣那,但從更廣泛的編程實踐和代碼質量的角度考慮,先用arr接收是一種更好的編程習慣,有助于提高代碼的嚴謹性和可讀性,減少潛在的錯誤和問題。?

2.2 順序表的銷毀

2.3?順序表的打印

?提前將打印接口寫好,方便后面的觀察

3.順序表的尾插和尾刪接口:

尾插:

切記:在插入數據后都要讓有效數據個數+1

尾刪:

4.順序表的擴容接口:

由于順序表的插入接口都要進行擴容判斷,所以我們可以把擴容單獨分裝成一個函數

這樣在后續的代碼中我們直接調用這個函數就可以了?

5.順序表的頭插和頭刪接口:

頭插:

頭刪:

6.順序表的指定位置插入和刪除接口:

插入:

刪除:

由于下面這些代碼邏輯都差不多,我也就沒做注釋了,指定位置的插入刪除無非就是要挪動數據,這個你自己畫圖后就可以看懂了

7.順序表的查找接口:

?三.完整代碼

SeqList.c:?

?SeqList.h:

test.c?:

這部分我只調用了部分函數(僅供參考)

四.順序表的問題及思考??

1. 中間/頭部的插?刪除,時間復雜度為O(N)
2. 增容需要申請新空間,拷?數據,釋放舊空間。會有不?的消耗。
3. 增容?般是呈2倍的增?,勢必會有?定的空間浪費。例如當前容量為100,滿了以后增容到
200,我們再繼續插?了5個數據,后?沒有數據插?了,那么就浪費了95個數據空間。
思考:如何解決以上問題呢?
這就需要我們另一種數據結構了,賣個關子,后續內容就等下一篇文章了,順序表哪塊不理解的歡迎評論區提問,同時哪塊有問題的也麻煩各位大佬及時指出我的問題,筆芯!!!

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

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

相關文章

SDL2基本的繪制流程與步驟

SDL2(Simple DirectMedia Layer 2)是一個跨平臺的多媒體庫,它為游戲開發和圖形應用提供了一個簡單的接口,允許程序直接訪問音頻、鍵盤、鼠標、硬件加速的渲染等功能。在 SDL2 中,屏幕繪制的流程通常涉及到窗口的創建、渲染目標的設置、圖像的繪制、事件的處理等幾個步驟。…

上位機工作感想-2024年工作總結和來年計劃

隨著工作年限的增增長,發現自己越來越不喜歡在博客里面寫一些摻雜自己感想的東西了,或許是逐漸被工作逼得“成熟”了吧。2024年,學到了很多東西,做了很多項目,也幫別人解決了很多問題,唯獨沒有漲工資。來這…

阿里云-銀行核心系統轉型之業務建模與技術建模

業務領域建模包括業務建模和技術建模,整體建模流程圖如下: 業務建模包括業務流程建模和業務對象建模 業務流程建模:通過對業務流程現狀分析,結合目標核心系統建設能力要求,參考行業建 模成果,形成結構化的…

Unity3D基于Unity整合BEPUphysicsint物理引擎實戰詳解

引言 Unity3D是一款流行的游戲引擎,提供了豐富的功能和工具,使開發者能夠輕松創建各種類型的游戲。其中,幀同步技術是游戲開發中至關重要的一環,它能確保多個玩家在同一時間內看到的游戲狀態是一致的。BEPUphysicsint是一個基于U…

【C++筆記】紅黑樹封裝map和set深度剖析

【C筆記】紅黑樹封裝map和set深度剖析 🔥個人主頁:大白的編程日記 🔥專欄:C筆記 文章目錄 【C筆記】紅黑樹封裝map和set深度剖析前言一. 源碼及框架分析1.1 源碼框架分析 二. 模擬實現map和set2.1封裝map和set 三.迭代器3.1思路…

win32匯編環境,怎么得到磁盤的盤符

;運行效果 ;win32匯編環境,怎么得到磁盤的盤符 ;以下代碼主要為了展示一下原理,應用GetLogicalDrives、GetLogicalDriveStrings函數、屏蔽某些二進制位、按雙字節復制內容等。以下代碼最多查8個盤,即返回值中的1個字節的信息 ;直接抄進RadAsm可編譯運行。…

MongoDB vs Redis:相似與區別

前言 在當今的數據庫領域,MongoDB 和 Redis 都是備受關注的非關系型數據庫(NoSQL),它們各自具有獨特的優勢和適用場景。本文將深入探討 MongoDB 和 Redis 的特點,并詳細對比它們之間的相似之處和區別,幫助…

mybatis(19/134)

大致了解了一下工具類,自己手敲了一邊,java的封裝還是真的省去了很多麻煩,封裝成一個工具類就可以不用寫很多重復的步驟,一個工廠對應一個數據庫一個environment就好了。 mybatis中調用sql中的delete占位符里面需要有字符&#xf…

重學SpringBoot3-WebClient配置與使用詳解

更多SpringBoot3內容請關注我的專欄:《SpringBoot3》 期待您的點贊??收藏評論 重學SpringBoot3-WebClient配置與使用詳解 1. 簡介2. 環境準備 2.1 依賴配置 3. WebClient配置 3.1 基礎配置3.2 高級配置3.3 retrieve()和exchange()區別 4. 使用示例 4.1 基本請求操…

.Net Core微服務入門全紀錄(二)——Consul-服務注冊與發現(上)

系列文章目錄 1、.Net Core微服務入門系列(一)——項目搭建 2、.Net Core微服務入門全紀錄(二)——Consul-服務注冊與發現(上) 3、.Net Core微服務入門全紀錄(三)——Consul-服務注…

Spark Streaming的核心功能及其示例PySpark代碼

Spark Streaming是Apache Spark中用于實時流數據處理的模塊。以下是一些常見功能的實用PySpark代碼示例: 基礎流處理:從TCP套接字讀取數據并統計單詞數量 from pyspark import SparkContext from pyspark.streaming import StreamingContext# 創建Spar…

深度學習系列75:sql大模型工具vanna

1. 概述 vanna是一個可以將自然語言轉為sql的工具。簡單的demo如下: !pip install vanna import vanna from vanna.remote import VannaDefault vn VannaDefault(modelchinook, api_keyvanna.get_api_key(my-emailexample.com)) vn.connect_to_sqlite(https://va…

【線性代數】列主元法求矩陣的逆

列主元方法是一種用于求解矩陣逆的數值方法,特別適用于在計算機上實現。其基本思想是通過高斯消元法將矩陣轉換為上三角矩陣,然后通過回代求解矩陣的逆。以下是列主元方法求解矩陣 A A A 的逆的步驟: [精確算法] 列主元高斯消元法 步驟 1&am…

[0242-06].第06節:SpringBoot對SpringMVC的自動配置

SpringBoot學習大綱 一、基于SpringBoot搭建Web工程: 1.1.編碼實現步驟: a.創建SpringBoot項目 b.選中依賴:選中我們所需要的模塊 1.2.SSM中的WEB開發配置與SpringBoot中WEB開發自動配置對比: a.SSM中的WEB開發: 1…

【21】Word:德國旅游業務?

目錄 題目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 題目 NO1.2.3 F12:另存為布局→頁面設置→頁邊距:上下左右選中“德國主要城市”→開始→字體對話框→字體/字號→文本效果:段落對話框→對齊方式/字符間距/段落間距 NO4 布局→表對話框…

什么是軟件架構

什么是軟件架構 程序員說,軟件架構是要決定編寫哪些C程序或OO類、使用哪些庫和框架 程序經理說,軟件架構就是模塊的劃分和接口的定義 系統分析員說,軟件架構就是為業務領域對象的關系建模 配置管理員說,軟件架構就是開發出來的…

1/20賽后總結

1/20賽后總結 T1『討論區管理員』的旅行 - BBC編程訓練營 算法:IDA* 分數:0 damn it! Ac_code走丟了~~(主要是沒有寫出來)~~ T2華強買瓜 - BBC編程訓練營 算法:雙向DFS或者DFS剪枝 分數:0 Ac_code…

大數據與AI驅動的商業查詢平臺:企業市場拓展的變革引擎?

在競爭白熱化的商業環境里,企業對準確市場信息的高效獲取能力,直接關系到業務拓展的成敗。商業查詢平臺借助大數據和人工智能技術,為企業提供精準客戶篩選、市場拓展分析以及風險評估服務,正逐漸成為企業市場開拓的得力助手。本文…

redis 各個模式的安裝

一、Redis單機安裝 1、安裝gcc依賴 Redis是C語言編寫的,編譯需要GCC。 Redis6.x.x版本支持了多線程,需要gcc的版本大于4.9,但是CentOS7的默認版本是4.8.5。 升級gcc版本: yum -y install centos-release-scl yum -y install d…

TiDB 的優勢與劣勢

TiDB 的優勢與劣勢 TiDB 作為一款新興的分布式數據庫,在業界逐漸嶄露頭角。它兼具傳統關系型數據庫的特性,又充分利用分布式架構的優勢。那么,TiDB 究竟有怎樣的優缺點呢?今天我們來聊聊 TiDB 的優勢與劣勢,幫你全面了…