日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

結合計算機內存的特點, 重要操作的效率, 人們提出了兩種基本的實現模型

  • 順序表: 將數據按順序連續地放在儲存區里, 元素的位置關系由順序隱式地指出
  • 鏈表:通過鏈接結構將數據放在分散的位置, 元素的位置由上下文得出
  • 順序表的實現

    設有一個順序表, 起始的內存位置為

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

    外置的順序表中儲存的是數據的地址或者索引

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

    順序表的優缺點

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

    順序表得基本操作及復雜度

    創建空表:

    . 分配一塊內存空間, 記錄表的容量并將當前元素數歸零

    簡單判斷:

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

    訪問元素:

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

    遍歷操作:

    . 從起始位置一次訪問

    查找元素:

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

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

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

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

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

    動態表的實現

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

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

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

    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中的個數 len() 返回元素個數 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() 反轉序列

    鏈表--單鏈表

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

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

    單鏈表

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

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

    基本操作

    創建空列表: 只需要把相應的表頭變量設置為空鏈接

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

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

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

    加入元素: 創建一個新結點并存入數據; 將上一個鏈接指向新結點; 將新結點的鏈接指向下一個結點.

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

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

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。