順序表專題 1 順序表

2021-09-22 21:14:49 字數 1889 閱讀 9158

順序表的實現

元素儲存區操作

需求:將一組(通常是同一型別)的幾個資料元素作為乙個整體管理和使用,需要建立這種元素的組,並用變數對他們進行記錄。這樣一組資料的元素個數可能發生變化(因為增刪改查等操作)。

對於這種需求,最簡單的解決方式是將這組元素視為乙個序列,可以將這個結構抽象為線性表。乙個線性表是某類元素的集合,還記錄著元素之間的一種順序關係。線性表是最基本的資料結構之一,在實際的專案中應用廣泛。同時線性表也是更複雜的結構的實現基礎。

根據線性表儲存方式的不同,分為兩種實現模型

模型說明

順序表將元素按順序存放在一塊連續的記憶體區域中

鍊錶將元素存放在通過鏈結(指標)構造起來的一系列儲存塊中。

本節筆記只講解順序表,鍊錶見後續筆記。

按照儲存元素的方式將順序表分為兩類,分別對應下圖的a和b,

如圖a所示,資料元素本身連續儲存,每個元素所佔的儲存單元大小都是固定相同的。元素的下標是其邏輯位址,而元素儲存的實體地址可以通過儲存區的起始位址 loc(e0)推斷得到。

主要是針對元素大小不統一的情況。將實際資料存放在記憶體的某處,而將其位址按順序存放在順序表中。存放位址所需的記憶體很小,所以這種順序表占用的記憶體空間並不大。

上圖即是兩種形式順序表的展示。左圖是基本布局的順序表,右圖是元素外接的順序表。

順序表的實現也分為兩種方式,一體式和分離式。

max和num是順序表的資訊存放區域。

引數說明

max指定該順序表最多存放的元素數目;

num指定的是當前順序表中存放了多少元素。

儲存順序表結構的資訊與元素儲存區以連續的方式被存放於一塊儲存區中。兩部分資料形成乙個完整的順序表物件。這種結構的整體性強,易於管理,但是由於資料儲存區是順序表的一部分,所以順序表建立後,元素儲存區也就固定了。

上圖展示的是同乙個資料以不同的結構實現的形式。左邊是一體式順序表;右邊是分離式順序表。

一體式結構由於順序表的資訊區和資料區相連,所以如果想對資料區域進行更換,只能整體搬遷,即整個順序表物件改變。

分離式結構如果想更換資料區,僅需將順序表的資訊區引用的資料區的位址更新即可,順序表物件並沒有改變。

採用分離式結構的順序表如果想將其資料區進行擴充,僅需要對錶資訊的元素值進行改變,如改變max和num相應的值,並更新引用的資料區的位址即可。而一體式結構的順序表則需要使用更大的**將其整體替換,當資料量很大的時候,這種替換方式的成本很高。

擴充資料的兩種策略,

策略說明

特點線性增長

每次擴充固定數目的位置,比如一次擴充10個元素位置

節省空間,但是在資料量較大的時候,擴充操作會很頻繁,操作次數很多從而影響效率。

倍數增長

每次擴容採取加倍的形式,如每次擴充都增加一倍的儲存空間

在資料量較大時減少了操作次數,但是容易造成空間的浪費。是一種以空間換時間的策略。

順序表 順序表定位

這兩個題本質一模一樣,唯一不同的是本題利用 順序表 將陣列a包裝了起來。在遍歷的過程中,拿順序表的資料去和x比對,若相同,返回當前下標值,若到了最後乙個資料元素都不相同,就返回 1 1.遍歷順序表 2.挨個比對資料元素 prism lang c include const int max 20 設定...

1 線性表的順序儲存 順序表

採用順序儲存結構的線性表通常稱為順序表,其在記憶體中是以陣列的形式來儲存。如下所示 這。這。就是陣列啊。為嘛叫這麼奇怪的名字?下面是順序表的定義 typedef struct sqlist elemtype代表資料型別 有了定義,不難寫出順序表的建立程式。下面,以int型別陣列為基礎建立順序表 in...

順序表應用5 有序順序表歸併 順序表做法)

順序表應用5 有序順序表歸併 time limit 100 ms memory limit 880 kib submit statistic problem description 已知順序表a與b是兩個有序的順序表,其中存放的資料元素皆為普通整型,將a與b表歸併為c表,要求c表包含了a b表裡所有...