日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

人们通常先在线性表尾部临时添加一个_数据结构学习笔记-线性表

發(fā)布時間:2025/3/21 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人们通常先在线性表尾部临时添加一个_数据结构学习笔记-线性表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們經(jīng)常會處理一系列類型相同的數(shù)據(jù), 創(chuàng)建這種元素組, 讀取和修改

當我們處理一個具有有窮或者無窮的元素數(shù)據(jù)集的時候, 我們需要將其作為一個整體來管理和使用, 用變量去表示它們, 傳入和傳出函數(shù)等等. 因此需要用一種抽象的數(shù)據(jù)類型去管理它們.

  • 從實現(xiàn)者的角度, 需要提供一種有用而且效率高的操作, 來訪問和修改這些數(shù)據(jù). 為了實現(xiàn)這一目的, 必須把線性表這種數(shù)據(jù)結(jié)構(gòu)組織好, 賦予一種合適的表示.
  • 從使用者的角度, 能簡單地去使用這種結(jié)構(gòu), 有效地實現(xiàn)常用的操作.

結(jié)合計算機內(nèi)存的特點, 重要操作的效率, 人們提出了兩種基本的實現(xiàn)模型

  • 順序表: 將數(shù)據(jù)按順序連續(xù)地放在儲存區(qū)里, 元素的位置關(guān)系由順序隱式地指出
  • 鏈表:通過鏈接結(jié)構(gòu)將數(shù)據(jù)放在分散的位置, 元素的位置由上下文得出
  • 順序表的實現(xiàn)

    設(shè)有一個順序表, 起始的內(nèi)存位置為

    , 每個元素需要的儲存單元數(shù)為 , 那么第 個元素的地址就是 . python 中l(wèi)ist的每個元素大小和類型都可以不一樣, 因此選擇了元素外置的順序表:

    外置的順序表中儲存的是數(shù)據(jù)的地址或者索引

    通常為了描述順序表這個對象的屬性, 還會賦予一塊記錄表屬性的信息記錄域, 儲存最大元素容量和當前元素數(shù).

    順序表的優(yōu)缺點

    • 優(yōu)點: 按索引訪問元素 , 儲存緊湊節(jié)省空間
    • 缺點: 固定大小的元素儲存空間會造成內(nèi)存的浪費. 插入元素的時候會移動許多元素, 效率低

    順序表得基本操作及復(fù)雜度

    創(chuàng)建空表:

    . 分配一塊內(nèi)存空間, 記錄表的容量并將當前元素數(shù)歸零

    簡單判斷:

    . 當當前元素數(shù)小于最大元素數(shù), 表未滿, 反之, 滿

    訪問元素:

    . 檢查索引是否越界, 越界報錯, 不越界返回值

    遍歷操作:

    . 從起始位置一次訪問

    查找元素:

    . 沒有別的辦法, 只能遍歷

    插入元素: 分情況討論.:從表尾端插入, 非保序的插入, 保序的插入

    • 尾端插入: 顯然效率最高, 不需要對其他數(shù)據(jù)進行調(diào)整, 只需要保證不越界即可
    • 非保序插入: 將插入位置處的數(shù)據(jù)挪到隊尾, 新數(shù)據(jù)插入
    • 保序插入: 調(diào)整其后所有元素的位置, 平均來看和數(shù)量成正比

    刪除元素: 同樣三種情況: 刪除表尾, 非保序刪除, 保序刪除

    • 特例是查詢刪除, 這種情況同樣也是線性復(fù)雜度

    動態(tài)表的實現(xiàn)

    python中的list是動態(tài)順序表, 面對現(xiàn)有的儲存空間不夠用的情況時采取一下策略:

  • 申請更大的元素儲存區(qū)
  • 把現(xiàn)有元素復(fù)制到新空間
  • 改變信息儲存區(qū)對元素儲存區(qū)的鏈接(指向)
  • 加入新元素
  • 我們可以發(fā)現(xiàn)一個問題, 即新申請的空間有多大. 采取翻倍增加空間, 則會將復(fù)雜度降到

    . 但是付出的代價時空閑的單元將明顯增多, 付出空間的代價. 因此在面對大數(shù)據(jù)的時候, 提前指定合適大小的儲存空間會明顯降低擴充儲存空間時的開銷.

    python 順序表基本操作

    • 共有操作
    x in s 如果有返回True, 反之False s1 + s2 兩列表合并 s * n n個s合并 s[ : : ] 切片操作 s.index(x[,i [, j ]]) 返回元素x的索引, 可以是在i之后和j之前 s.count(x) 返回x在list中的個數(shù) len() 返回元素個數(shù) max() 返回最大值 min() 返回最小值
    • 可變列表list
    s[i] = x 賦值 s[i:j] = t 將可迭代對象賦值給切片 del s[i:j] 刪除 等價于 s[i:j] = [] s.append(x) 尾端添加 等價于 s[len(s):len(s)] = [x] 等價于 s.insert(len(s),x) s.insert(i,x) 位置i處插入x s.clear() 清空 等價于 del s[:] s.extend(t) 列表相加 等價于 s+=t s.pop([,i]) 彈出 從s中刪除最后一個,也可以是指定索引的元素, 并返回 s.remove(x) 移除指定元素 s.reverse() 反轉(zhuǎn)序列

    鏈表--單鏈表

    所謂線性表, 就是元素的序列, 維持這元素間的線性關(guān)系, 滿足能找到首元素, 從任意元素出發(fā)能找到其后的元素. 當需要將數(shù)據(jù)離散儲存的時候, 我們就需要引入鏈表的概念. 鏈表中沒有顯式的前后關(guān)聯(lián), 但通過鏈接技術(shù), 能實現(xiàn)元素之間的順序關(guān)系. 基本想法是:

    • 把元素儲存在獨立的儲存塊中--稱為結(jié)點
    • 從任意結(jié)點可以找到下一個結(jié)點
    • 用鏈接的方式顯示地記錄與下一結(jié)點之間的關(guān)聯(lián)

    單鏈表

    單鏈表的結(jié)點是一個二元組, 其表元素域elem中保存著數(shù)據(jù)項, 鏈接域next中保存著下一個節(jié)點的標識. 這樣, 從表中任意節(jié)點開始都可以找到保存著下一個元素的結(jié)點, 即從首結(jié)點P出發(fā)能找到任何一個結(jié)點.

    為了表示一個鏈表的開始, 只需要一個變量保存表得首結(jié)點的引用, 把這樣的變量成為表頭變量或者表頭指針. 為了表示一個鏈表的結(jié)束, 只需要給鏈接域一個空鏈接, python中可以用None來表示.

    基本操作

    創(chuàng)建空列表: 只需要把相應(yīng)的表頭變量設(shè)置為空鏈接

    刪除列表: python中只需要將表指針賦為None, 就拋棄了所有節(jié)點, GC會自動回收儲存

    判斷是否為空: 檢查表頭鏈接是否為None

    判斷是否滿: 除非儲存用完了所有儲存空間, 否則不會滿

    加入元素: 創(chuàng)建一個新結(jié)點并存入數(shù)據(jù); 將上一個鏈接指向新結(jié)點; 將新結(jié)點的鏈接指向下一個結(jié)點.

    刪除元素: 將上一結(jié)點的鏈接越過待刪除的, 直接指向下下個結(jié)點.

    由于鏈表的順序隱式地有鏈接指明, 因此所有的查詢讀取操作都是需要對鏈表進行遍歷, 時間復(fù)雜度為

    循環(huán)列表則是將單鏈表的尾端空鏈接指向表頭鏈接, 由此可以達成循環(huán)的目的.

    雙列表則是一個儲存單元前后各有一個鏈接, 可以找到上一個和下一個結(jié)點

    總結(jié)

    以上是生活随笔為你收集整理的人们通常先在线性表尾部临时添加一个_数据结构学习笔记-线性表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。