順序表和煉表(Sqlist Linklist)

2021-08-28 23:12:54 字數 1815 閱讀 3946

眾所周知,線性表是乙個比較靈活的儲存空間,其中有兩種儲存格式:線性表和鍊錶,下文盡量詳細地進行整理二者的特點和區別。

順序表,顧名思義,就是用連續的空間儲存當下得到的資料。

順序鏈性錶用sqlist稱呼,提到sqlist就指的是順序鏈性表

其特點在於:

1.儲存空間是連續的,可以通過下標找到前後成員的值

2.同時,因為空間的特殊性,可以通過下標來進行跳躍性查詢

順序表的實現:

以下是之前敲的乙個大程式的關於順序表建立的小部分

typedef book elemtype;

//更改為:

typedef int elemtype;

這樣就是將原本為結構體格式的**改變為只可以儲存整型。

完整的建立順序表的**:

typedef int status;

typedef struct

book;

typedef struct

sqlist;

typedef book elemtype;//上文提到的地方

status initlist(sqlist &l)

順序表的優點在於:

1.可以迅速的調取某乙個位置的數值或某乙個數值所在的位置(兩個的複雜度均為o(n))

2.所儲存的資料均為連續的,查詢表長可以直接用l.length得到(複雜度為o(1))

而缺點在於:

1.新增與刪除時需要整體將後方數值進行移動(當然新增或刪除最後一位上的數值例外)

甚至如果要求為:「將某一位上的數值刪除的話」,有可能呼叫兩次遍歷。

鍊錶?個人認為鍊錶與線性表的優缺點正好相反。

先敲定義:

用度娘的話來說:「鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。」 

我認為已經寫得挺細了(沉思),簡單來說,鍊錶因為儲存空間不是完全連續的,故而是由每乙個結點中的指標域來連線前後的資料,最基本的鍊錶只有下個資料的指標,故而只能從前往後查詢,從前往後遍歷。這樣的乙個弊端引出了另一種結點中含有上下位址的鍊錶(),解決了這個問題。

由此可以看出空間和時間的損耗是成反比?節約時間的狀態下會適當犧牲空間。

鍊錶呼叫是用指標操作,建立時會將頭結點進行指空操作(設為空指標)

【詳細操作可以參考鄙人另一篇關於(lru)的部落格,有完整的建立鍊錶的**】

#include#define ok 1;

using namespace std;

typedef int elemtype;

typedef int status;

typedef struct lnode

lnode,*linklist;

status intlist(linklist &l)//初始化

建立之後可以通過匯入陣列等格式的資料、讀取檔案或是輸入操作來填充資料。

插入和刪除相較於順序表而言更加簡明,但複雜度並不一定確定:

如果是給予了位址,則直接把位址位置進行調整,否則則是通過遍歷來找到該位置,再進行操作。故而在單純看「刪除」這個操作下,鍊錶要更加便捷,而完整的操作下,由於鍊錶查詢的弊端,優勢在鄙人看來不是十分突出。

通過下標查詢數值和查詢**長度操作,順序表相較於鍊錶而言更加便捷。

以上關於線性表提到的操作,由於整體看起來過長,將擷取之前所敲的部分**,通過銜接貼來。

順序表和煉表

定義 線性表是由n個具有相同特性的資料元素組成的有限序列,表中每個元素具有相同元素。邏輯上為連續的線性結構。常見的線性表 順序表,鍊錶 棧 佇列 字串 線性表根據物理儲存方式分為 順序表和煉表 線性表在邏輯上是線性結構,在物理上並不是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。動...

順序表和煉表

1.名詞解釋 資料 對客觀事物的符號表示 資料元素 資料的基本單位,可由若干個資料項組成 資料項 資料的不可分割的最小單位 資料物件 性質相同的資料元素的集合,是資料的子集 資料結構 相互之間存在特定關係的資料元素的集合 關係描述資料元素之間的邏輯關係 物理結構 儲存結構 資料結構在計算機中的表示 ...

c 順序表和煉表

這節來說下順序表和煉表 1 集合中必存在唯一的 第乙個元素 2 集合中必存在唯一的 最後乙個元素 3 除第乙個元素外,其他的元素都只有乙個後繼 4 除最後乙個元素外,其他的元素都只有乙個前驅 把線性表中的節點按照邏輯次序儲存在一組連續的位址單元中,在計算機中以陣列的形式儲存的線性表。在順序表中每個節...