首頁 > 常見問題 > 線性鍊錶是線性表的鍊式儲存結構嗎?

線性鍊錶是線性表的鍊式儲存結構嗎?

(*-*)浩
發布: 2019-10-24 09:50:34
原創
14200 人瀏覽過

根據資料結構中各資料元素之間前後關係的複雜程度,一般將資料結構分為兩大類型:線性結構與非線性結構。

線性鍊錶是線性表的鍊式儲存結構嗎?

線性鍊錶,顧名思義類似於一條鍊子的表,與線性鍊錶相對的是線性順序表,二者的差異是,線性順序表需要在記憶體中開闢一塊連續的區域,因此儲存的資料在記憶體中的狀態是連續的,而線性鍊錶在記憶體中的儲存是隨機的,資料之間的連結靠的是指針。   (推薦學習:web前端影片教學

如果一個非空的資料結構滿足下列兩個條件:

①有且只有一個根結點;

②每個結點最多有一個前件,也最多有一個後件。則稱該資料結構為線性結構,又稱線性表。所以線性表、棧與佇列、線性鍊錶都是線性結構,而二元樹是非線性結構。

具有連結儲存結構的線性表,它用一組位址任意的儲存單元存放線性表中的資料元素,邏輯上相鄰的元素在物理上不要求也相鄰,不能隨機存取。一般用結點描述:結點(表示資料元素) =資料域(資料元素的映像) 指標域(指示後繼元素儲存位置)

在鍊式儲存結構中,儲存資料結構的存儲空間可以不連續,各資料結點的儲存順序與資料元素之間的邏輯關係可以不一致,而資料元素之間的邏輯關係是由指標域來決定的。鍊式儲存方式即可用於表示線性結構,也可用來表示非線性結構。

一般來說,在線性表的鍊式儲存結構中,各資料結點的儲存符號是不連續的,且各結點在儲存空間中的位置關係與邏輯關係也不一致。對於線性鍊錶,可以從頭指標開始,沿著各結點的指標掃描到鍊錶中的所有結點。

建立一個線性鍊錶,這是一個動態產生鏈結點並依序將它們連結到鍊錶中的過程。設線性鍊錶的第1個鏈結點的指標為list。

當產生第一個鏈結點時,鍊錶為空,直接將鏈結點送list即可。每取得一個資料元素,就為此資料元素產生一個鏈結點,將所獲得的資料元素的資料資訊送給新結點的資料域的同時,將新結點的指標域置為NULL,然後將新結點插入到鍊錶的末端。

下面的演算法中是從一個名為 data.txt 的檔案中按行讀取字串作為線性鍊錶的資料元素。演算法如下:

LinkList creatList() {
    LinkList r, p, list = NULL;
    char data[ 100 ];
 
    FILE *f = fopen( "data.txt", "rb" );
    while( fgets( data, 100, f ) )
    {
        p = ( LinkList )malloc( sizeof( LNode ) );
        if( p != NULL ){
            strcpy( p->data, data );
            p->link = NULL;
 
            if( list == NULL )
                list = p;
            else
                r->link = p;
            r = p;
        }
    }
    fclose( f );
 
    return list;
}
登入後複製

以上是線性鍊錶是線性表的鍊式儲存結構嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板