【數據結構】動態順序表詳解

目錄

1.順序表的概念及結構

2.動態順序表的實現

2.1創建新項目

2.2動態順序表的創建

2.3接口的實現及測其功能

2.3.1初始化

2.3.2尾插

2.3.3頭插

2.3.4尾刪&頭刪

2.3.5打印&從任意位置插入

2.3.6刪除任意位置的數據

2.3.7查找

2.3.8銷毀順序表

3.結語


Hello everybody!今天打算跟大家聊聊動態順序表。順序表是最基礎的數據結構,也是最實用的數據結構。在今后學習棧和隊列時,會基于順序表去實現它們。動態順序表顧名思義,就是容量可變的順序表。我們可以隨意在該順序表中插入數值,并且會自動擴容,十分具有實際應用的價值。那廢話不多說,讓我們開始叭!

1.順序表的概念及結構

順序表是用一段物理地址連續的存儲單元一次存儲數據元素的線性結構,一般情況下采用數值存儲。在數值上完成數據的增刪查改。

順序表一般可以分為:

1.靜態順序表:使用定長數組存儲元素

2.動態順序表:使用動態開辟的數組存儲

由于靜態順序表實用價值極低,實現思路上不如動態順序表,且會實現動態順序表的話實現靜態順序表也沒有太大的問題。因此在這里只給大家詳細講解一下動態順序表的實現!

2.動態順序表的實現

2.1創建新項目

進入數據結構,我們要寫的代碼量會有十分明顯的增加。例如今天的動態順序表,代碼量將會輕輕松松突破100行。所以我建議創建三個文件。這樣便于理清代碼邏輯以及后期代碼的維護。我在上一篇文章和上上篇文章中有更詳細的介紹,如果有疑問可以參考棧詳解或隊列詳解。

2.2動態順序表的創建

首先我們要把需要用到的頭文件包含進來,下面的結構體就是咱們的順序表。其中各個變量的作用我已經注釋出來。結構體的下面是順序表的各種接口。

2.3接口的實現及測其功能

2.3.1初始化

首先我們來解釋一下為什么要傳結構體指針而不是結構體:要知道,函數傳參是對實際參數的拷貝。如果傳結構體的話,在函數體內部的一切操作都不會對函數外部的結構體有任何改變,所以我們需要傳指針。

這里將順序表的各個變量給一個起始值就算是完成初始化了。

2.3.2尾插

這兩個接口實現完成后我們來看看它們的功能如何:

在測試功能中,我們首先初始化,然后依次尾插了1,2,3,4,5,五個數據。該動態順序表應該會擴容兩次,因此容積是8,有效數據有5個,size為5。測試結果符合預期,這兩個接口功能正常。

2.3.3頭插

由于頭插依然會涉及到順序表容量不夠用從而自動擴容的情況,那么這個接口會有相當一部分代碼和尾插一模一樣。考慮到代碼的簡潔性,我們把自動擴容功能單獨拎出來形成一個函數:

有了這個函數,頭插和尾插直接調用它就ok了!

在頭插中,我們需要移動數據。在while循環中把所有的數據向后移動一位,再把要插入的數據把順序表中的第一個數據覆蓋掉。移動數據的時間復雜度是O(n),效率不高。由此可見順序表并不適合頭插。同樣的,也不適合頭刪。

測試功能正常。

2.3.4尾刪&頭刪

尾刪和頭刪的邏輯就比較簡單了。但是要特別說明一下,尾刪和頭刪并不是正在意義上的和數據刪除了,對于尾刪,只需把size減小一個就可以了,以后插入數據的話自然會把原數據覆蓋掉。頭刪就是用后面的數據向前覆蓋,也是同樣的道理。

2.3.5打印&從任意位置插入

如果上面的接口搞懂了的話,這兩個接口就沒什么難度啦!

2.3.6刪除任意位置的數據

2.3.7查找

2.3.8銷毀順序表

3.結語

好啦,關于動態順序表的討論就到這里嘍。看完這篇文章依然沒有搞懂的寶子可以把自己的疑惑發在評論區呦!

順序表是數據結構的基礎,大家一定要熟悉它!

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

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

相關文章

【交易誤區】初學者常犯的MT4外匯交易錯誤有哪些?

作為初學者,踏入外匯交易市場時,往往會陷入一些常見的誤區,導致交易效果不佳甚至遭受損失。在本文中,我將列舉并解釋五個初學者常見的MT4外匯交易錯誤,并提供相應的解決方案,幫助您避免這些錯誤&#xff0c…

java項目之社區互助平臺(ssm+vue)

項目簡介 社區互助平臺實現了以下功能: 1、一般用戶的功能及權限 所謂一般用戶就是指還沒有注冊的過客,他們可以瀏覽主頁面上的信息。但如果有中意的社區互助信息時,要登錄注冊,只有注冊成功才有的權限。2、管理員的功能及權限 用戶信息的添…

react大文件上傳

目錄 大文件上傳優點: 大文件上傳缺點: 大文件上傳原理: 為什么要用md5 實現流程: 部分代碼1: 部分代碼2:? 大文件上傳優點: 文件太大分片上傳能加快上傳速度,提高用戶體驗能斷點續傳 如果上次上傳失敗…

簡單工程模式

代碼實現 //simpleFactory.h #ifndef _SimpleFactory_H_ #define _SimpleFactory_H_#include <iostream> #include <exception> #include <string>using namespace std;class Operation { protected:double _numberA 0;double _numberB 0; public:Operat…

udp通信socket關閉后,緩存不清空

udp通信socket關閉后&#xff0c;緩存不清空 udp通信socket關閉后&#xff0c;緩存不清空如何清空udp緩存 udp通信socket關閉后&#xff0c;緩存不清空 關閉一個 UDP socket 連接后&#xff0c;底層接收緩沖區中存儲的數據不會被清空。實際上&#xff0c;關閉 socket 連接并不…

MybatisX插件使用

Mybatis X插件 MybatisX 是一款基于 IDEA 的快速開發插件&#xff0c;為效率而生。MybatisX官網&#xff1a;https://baomidou.com/pages/ba5b24/#%E5%8A%9F%E8%83%BD安裝方法&#xff1a;打開 IDEA&#xff0c;進入 File -> Settings -> Plugins&#xff0c;輸入 mybat…

三維控件中定位一個點_vtkPointWidget

開發環境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example參考代碼 demo解決問題&#xff1a;允許用戶使用三維光標在三維空間中定位一個點。關鍵類vtkPointWidget , 光標具有輪廓邊界框、軸對齊十字準線和軸陰影&#xff…

AD7021C 觸摸感應加燈光調節芯片IC 可用于觸摸臺燈、觸摸玩具燈等

AD7021C觸摸感應 IC 是為實現人體觸摸界面而設計的集成電路。可替代機械式輕觸按鍵&#xff0c;實現防水防塵、密封隔離、堅固美觀的操作界面。使用該芯片可以實現 LED 燈光亮度調節&#xff0c;方案所需的外圍電路簡單&#xff0c;操作方便。確定好靈敏度選擇電容&#xff…

【華為OD題庫-033】經典屏保-java

題目 DVD機在視頻輸出時&#xff0c;為了保護電視顯像管&#xff0c;在待機狀態會顯示"屏保動畫”&#xff0c;如下圖所示,DVD Logo在屏幕內來回運動&#xff0c;碰到邊緣會反彈:請根據如下要求&#xff0c;實現屏保Logo坐標的計算算法 1、屏幕是一個800 * 600像素的矩形&…

Vue3 provide 和 inject 實現祖組件和后代組件通信

provide 和 inject 能夠實現祖組件和其任意的后代組件之間通信&#xff1a; 一、provide 提供數據 我們在祖組件中使用provide 將數據提供出去。 使用provide 之前需要先進行引入&#xff1a; import { provide } from "vue"; 語法格式如下&#xff1a; provide(&q…

objectarx + libcurl下載文件遇到的問題

下載失敗導致cad崩潰,報錯’Error handler re-entered.Exiting now ,原因是因為我將libcurl相關的功能繼承到一個類中,在類中進行相關的webapi交互,但是由于最開始進行了請求所以沒有將curl進行初始化導致的傳遞數據錯誤.只需要在函數開始時進行初始化即可. curl curl_easy_i…

山西電力市場日前價格預測【2023-11-23】

日前價格預測 預測說明&#xff1a; 如上圖所示&#xff0c;預測明日&#xff08;2023-11-23&#xff09;山西電力市場全天平均日前電價為148.77元/MWh。其中&#xff0c;最高日前電價為420.40元/MWh&#xff0c;預計出現在18:00。最低日前電價為0.00元/MWh&#xff0c;預計出…

微信小程序開發學習——頁面布局、初始導航欄與跳轉

1.盒模型 要求實現效果如圖所示&#xff1a; 所有WXML元素都可以看作盒子&#xff0c;在WXSS中"box model”這一術語是用來設計和布局時使用盒模型本質上是一個盒子&#xff0c;封裝周圍的WXML元素它包括: 邊距&#xff0c;邊框&#xff0c;填充和實際內容&#xff0c;模…

【Java并發編程十一】同步控制三

LockSupport 線程阻塞工具 LockSupport的unpark() 方法可以先執行。 import java.util.ArrayList; import java.util.Random; import java.util.concurrent.*; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.LockSupport; import java.uti…

RAW RGB YUV數據差異

目錄 顏色與色彩空間 RAW圖像 RGB圖像 YUV圖像 顏色與色彩空間 顏色 顏色是人眼感知到的現象&#xff0c;它是由光波的頻率和強度所決定的&#xff0c;僅僅存在于人的眼睛和大腦中&#xff0c;因此為了方便描述顏色&#xff0c;引入了色彩空間。色彩空間 色彩空間&#xff…

C語言--數組與指針--打印字符串的n種方式

一.知識背景 一維數組名的含義 arr一般表示數組的起始地址&#xff08;除了兩種例外&#xff09; 1.在定義數組的同一個函數中(不是形參),求sizeof(arr),求整個數組的字節數 2.在定義數組的同一個函數中(不是形參),&arr1,加整個數組的大小 (經常考試) 3.除上面以外,arr都表…

和鯨 × 暨大經管:高效 SAAS 服務持續賦能交叉學科應用型數據人才培養

隨著新一輪科技革命與產業變革的加速演進&#xff0c;擁有學科背景的應用型數據科學人才逐漸成為我國政產學研各界的人力資源需求重點。為響應需求&#xff0c;國家愈發重視新生力量數據思維與意識的培養&#xff0c;各高校也紛紛探索如何以新興信息技術賦能傳統主流學科。 在…

達索系統SOLIDWORKS流體分析網格劃分失敗,大多是這2種原因

SOLIDWORKS Flow Simulation 是直觀的流體力學 (CFD) 分析軟件&#xff0c;該軟件功能強大、操作人性化&#xff0c;快速輕松的分析產品內部或外部流體的流動情況&#xff0c;以用來改善產品性能和功能。 當流體分析運行網格劃分時&#xff0c;提示失敗。 這是由于凸起面與圓…

【LeetCode刷題】--43.字符串相乘

43.字符串相乘 方法一&#xff1a;做加法&#xff0c;模擬豎式乘法的方法計算乘積 class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")){return "0";}String res "0";//nu…

Hadoop -hdfs的讀寫請求

1、HDFS寫數據&#xff08;宏觀&#xff09;&#xff1a; 1、首先&#xff0c;客戶端發送一個寫數據的請求&#xff0c;通過rpc與NN建立連接&#xff0c;NN會做一些簡單的校驗&#xff0c;文件是否存在&#xff0c;是否有空間存儲數據等。 2、NN就會將校驗的結果發送給客戶端…