1. 程式人生 > >資料結構中 線性表,棧,佇列,演算法之間的聯絡與區別

資料結構中 線性表,棧,佇列,演算法之間的聯絡與區別

一。連結串列為什麼需要

        在程式中,經常需要將一種(通常是同為某個型別的)資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們,傳進傳出函式等。一組元素可能發生變化(像增加或刪除元素。)

       對於這種需求,最簡單的解決方案便是將這樣一組元素看成一個序列,用元素在序列裡的位置和順序,表示實際應用中的某種意義的資訊,或者表示資料之間的某種關係。

       這樣的一組序列元素的組織形式,我們可將其抽象為線性表。一個線性表示某類元素的一個集合,還記錄元素之間的一種順序關係。

線性表是最基本的資料結構之一,在實際程式中應用非常廣泛,他還經常被用作複雜的資料結構的實現基礎。

線性表的實際儲存方式,有兩種實現模型:

  • 順序表,將元素順序地存放在一塊連續的儲存區裡,元素間的順序關係由它們的儲存順序自然表示。
  • 連結串列,將元素存放在通過連結構造起來的一系列儲存塊中。

 

順序表的基本形式:

這個主要表現的是順序表中元素的儲存,注意與下年的區別

          1)資料元素本身連續儲存,每個元素所佔的儲存單元大小固定相同。

          2)元素外接的順序表,將實際資料元素另行儲存,而順序表中各單元位置儲存對應元素的地址資訊(即連結)。。由於每個連結所需的儲存量相同,通過上述公式,可以計算出元素連結的儲存位置,而後順著連結找到實際儲存的資料元素。

 

順序表的兩種基本實現方式:

        主要表示的是如何表達這個順序表(兩部分),即 一個順序表的完整資訊包括兩部分,一部分是表中的元素集合,另一部分是為實現正確操作而需記錄的資訊,即有關表的整體情況的資訊,這部分資訊主要包括元素儲存區的容量和當前表中已有的元素個數兩項。

1)一體式結構 

儲存表資訊的單元與元素儲存區以連續的方式安排在一塊儲存區裡,兩部分資料的整體形成一個完整的順序表物件。

一體式結構整體性強,易於管理。但是由於資料元素儲存區域是表物件的一部分,順序表建立後,元素儲存區就固定了。

2)分離式結構

表物件裡只儲存與整個表有關的資訊(即容量和元素個數),實際資料元素存放在另一個獨立的元素儲存區裡,通過連線與基本表物件關聯。

順序表在建立的時候要考慮兩個問題:

  • 元素儲存區的替換
  • 元素儲存區的擴充

這也是連結串列產生的原因

 

連結串列在建立的時候,由於每個節點存有下一個節點的指向,所以不需要預估大小

更通俗的將:


棧是線性表的一種應用,我們無需關心其在物理上的儲存位置,只需關心棧的相關操作即可

順序表和連結串列解決的是資料如何存放的,棧描述的是資料是如何操作

棧的引用:
    python對錶達式的解析
    
    
對已經構造出來的線性表可以有多種排序,而多種排序就是不同思維的體現(演算法)

 

列表和順序表的操作,要保證在操作時不能出現元素節點的丟失,也就是指向的執行順序