眾所周知,線性表是乙個比較靈活的儲存空間,其中有兩種儲存格式:線性表和鍊錶,下文盡量詳細地進行整理二者的特點和區別。
順序表,顧名思義,就是用連續的空間儲存當下得到的資料。
順序鏈性錶用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 除最後乙個元素外,其他的元素都只有乙個前驅 把線性表中的節點按照邏輯次序儲存在一組連續的位址單元中,在計算機中以陣列的形式儲存的線性表。在順序表中每個節...