数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)
我們先來看一個關于查找的例子。查找,就是從復雜的數據結構中,找到滿足某個條件的元素。通常可從以下兩個方面來對數據進行查找操作:?
- 根據元素的位置或索引來查找;
- 根據元素的數值特征來查找。
針對上述兩種情況,我們分別給出例子進行詳細介紹。
?
1. 從數組中找元素
例 1,我們來看第二個例子,對于一個數組,找到數組中的第二個元素并輸出。
?
這個問題的處理很簡單。由于數組本身具有索引 index ,因此直接通過索引就能查找到其第二個元素。別忘了,數組的索引值是從 0 開始的,因此第二個元素的索引值是 1 。不難發現,因為有了 index 的索引,所以我們就可以直接進行查找操作來,這里的時間復雜度為 O(1)。
?
2. 從鏈表中找元素
例 2,我們來看第二個例子,如果是鏈表,如何找到這個鏈表中的第二個元素并輸出呢?
?
鏈表和數組一樣,都是 O(n) 空間復雜度的復雜數據結構。但其區別之一就是,數組有 index 的索引,而鏈表沒有。鏈表是通過指針,讓元素按某個自定義的順序“手拉手”連接在一起的。
?
既然是這樣,要查找其第二個元素,就必須要先知道第一個元素在哪里。以此類推,鏈表中某個位置的元素的查找,只能通過從前往后的順序逐一去查找。不難發現,鏈表因為沒有索引,只能“一個接一個”地按照位置條件查找,在這種情況下時間復雜度就是 O (n)。
?
3. 查找數值
例 3,我們再來看第三個例子,關于數值條件的查找。
?
我們要查找出,數據結構中數值等于 5 的元素是否存在。這次的查找,無論是數組還是鏈表都束手無策了。唯一的方法,也只有按照順序一個接一個地去判斷元素數值是否滿足等于 5 的條件。很顯然,這樣的查找方法時間復雜度是 O(n)。那么有沒有時間復雜度更低的方式呢?答案當然是:有。
?
我們采用的方法是,把數組轉變為字典,以保存元素及其出現次數的 k-v 映射關系。而在每次的循環中,都需要對當前遍歷的元素,去查找它是否在字典中出現過。這里就是很實際的按照元素數值查找的例子。如果借助字典的數據類型,這個例子的查找問題,就可以在 O(1) 的時間復雜度內完成了。
?
4. 新增數據
例 4,我們再來看第四個例子,關于復雜數據結構中新增數據,這里有兩個可能:
- 第一個是在這個復雜數據結構的最后,新增一條數據;
- 第二個是在這個復雜數據結構的中間某個位置,新增一條數據。
這兩個可能性的區別在于,新增了數據之后,是否會導致原有數據結構中數據的位置順序改變。接下來,我們分別來舉例說明。
?
在復雜數據結構中,新增一條數據。假設是在數據結構的最后新增數據。此時新增一條數據后,對原數據沒有產生任何影響。因此,執行的步驟是:?
- 首先,通過查找操作找到數據結構中最后一個數據的位置;
- 接著,在這個位置之后,通過新增操作,賦值或者插入一條新的數據即可;
如果是在數據結構中間的某個位置新增數據,則會對插入元素的位置之后的元素產生影響,導致數據的位置依次加 1 。例如,對于某個長度為 4 的數組,在第二個元素之后插入一個元素。則修改后的數組中,原來的第一、第二個元素的位置不發生變化,第三個元素是新插入的元素,第四、第五個元素則是原來的第三、第四個元素。
?
5. 刪除數據
我們再來看看刪除。在復雜數據結構中刪除數據有兩個可能:?
- 第一個是在這個復雜數據結構的最后,刪除一條數據;
- 第二個是在這個復雜數據結構的中間某個位置,刪除一條數據;
這兩個可能性的區別在于,刪除了數據之后,是否會導致原有數據結構中數據的位置順序改變。由于刪除操作和新增操作高度類似,就不再舉詳細闡述了。
?
6. 綜合操作
例 5,在某個復雜數據結構中,在第二個元素之后新增一條數據。隨后再刪除第 1 個滿足數值大于 6 的元素。我們來試著分析這個任務的數據操作過程。這里有兩個步驟的操作:?
- 第一步,在第二個元素之后新增一條數據。這里包含了查找和新增兩個操作,即查找第二個元素的位置,并在數據結構中間新增一條數據;
- 第二步,刪除第 1 個滿足數值大于 6 的元素。這里包含查找和刪除兩個操作,即查找出第 1 個數值大于 6 的元素的位置,并刪除這個位置的元素。
因此,總共需要完成的操作包括,按照位置的查找、新增和按照數據數值的查找、刪除。
?
7. 總結
數據處理的基本操作只有 3 個,分別是增、刪、查。
- 增和刪又可以細分為在數據結構中間的增和刪,以及在數據結構最后的增和刪。區別就在于原數據的位置是否發生改變;
- 查找又可以細分為按照位置條件的查找和按照數據數值特征的查找;
幾乎所有的數據處理,都是這些基本操作的組合和疊加,其中涉及修改的操作可以看做是刪除和新增來完成。
參考:
https://kaiwu.lagou.com/course/courseInfo.htm?courseId=185#/detail/pc?id=3341
總結
以上是生活随笔為你收集整理的数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(02)— 时间复杂度与空间复杂
- 下一篇: 2022-2028年中国聚合物气体分离膜