線性表之順序表

2021-09-14 07:04:02 字數 2345 閱讀 9623

線性結構是最簡單、最常用的一種資料結構。其特點是:在資料元素的非空有限集合中,除第乙個元素無直接前驅、最後乙個元素無直接後繼外,集合中其他每個資料元素均有惟一的直接前驅和惟一的直接後繼。

線性表的邏輯結構:線性表可描述為,線性表是n個型別相同的資料元素的有限序列,對n>0,除第乙個元素無直接前驅、最後乙個元素無直接後繼外,其餘的每個資料元素只有乙個直接前驅和乙個直接後繼,資料元素之間具有一對一的關係。

線性表的定義:線性表是由n(n>=0)個型別相同的資料元素組成的有限序列,記做(a1,a2,…,ai-1,ai,ai+1,…,an)。

(1)線性表中元素的個數n被定義為線性表的長度,n=0時稱為空表。

(2)這裡的資料元素ai(1<= i <=n)具體含義在不同情況下可以不同,它既可以是原子型別,也可以是結構型別(在較為複雜的線性表中,資料元素可由若干資料項組成,例如學籍表,每個學生的相關資訊都由學號、姓名、籍貫等資料項組成,常被稱為乙個記錄(或稱資料元素)),但乙個線性表中的資料元素必須屬於同一資料物件(含大量型別相同記錄的線性表稱為檔案(或稱資料物件))。

(3)線性表中相鄰資料元素之間存在著序偶關係,即對於非空的線性表,表中ai-1領先於ai,稱ai-1是ai的直接前驅,而稱ai是ai-1的直接後繼。除了第乙個元素無直接前驅,最後乙個元素無直接後繼外,其餘的每個資料元素都有且僅有乙個直接前驅和乙個直接後繼。這也是線性結構的特點。

由此,可將線性表的特點概括為:

(1)同一性:線性表由同類資料元素組成,每乙個ai必須屬於同一資料物件。

(2)有窮性:線性表由有限個資料元素組成,表長度就是表中資料元素的個數。

(3)有序性:線性表中相鄰資料元素之間存在著序偶關係。

由此可以看出,線性表是一種最簡單的資料結構,因為資料元素之間是由一前驅一後繼的直觀有序的關係確定的;線性表又是一種最常見的資料結構,因為矩陣、陣列、字串、堆疊、佇列等都符合線性條件。

在計算機內存放線性表,主要有兩種基本的儲存結構:順序儲存結構和鏈式儲存結構。

線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個資料元素,使得線性表中在邏輯結構上相鄰的資料元素儲存在連續的物理儲存單元中,即通過資料元素物理儲存的連續性來反映資料元素之間邏輯上的相鄰關係。

採用順序儲存結構存放的線性表通常稱為順序表。

順序表:關係線性化,結點順序存。

只要知道順序表中第乙個元素的儲存位址(基位址)和表中每個元素所佔儲存單元的多少,就可以計算出順序表中任意乙個資料元素的儲存位址,從而實現對順序表中資料元素的隨機訪問。

靜態順序表定義如下

typedef int datatype;

#define maxsize (10)//此處的巨集定義常量表示順序表可能達到的最大長度

typedef struct seqlist

seqlist;

說明:

1、結點型別定義中的datatype資料型別是為了描述的統一而自定的,在實際應用中,使用者可以根據自己實際需要來具體定義順序表中元素的資料型別,如 int 等或是一種struct結構體型別,結構體陣列。

2、從陣列中起始下標為0處開始存放順序表中第乙個元素。因此需注意區分元素的序號和該元素在陣列中的下標之間的對應關係。ai在順序表中的序號為i,其對應的array陣列下標為i-1。

3、利用定義的順序表的資料型別seqlist就可以定義變數了。變數的定義與使用方法有兩種:

(1)通過變數定義語句:seqlist l將l定義為seqlist型別的變數,可通過l.array[i-1]來訪問順序表中序號為i的元素ai;通過l.last可得到順序表中最後乙個元素的下標,而l.last+1就是順序表的長度。

(2)通過指標變數定義語句:seqlist *l將l定義為指向seqlist型別的指標變數,使用時可通過l->array[i-1]來訪問順序表中序號為i的元素ai,通過l->last+1可得到順序表的長度。

相關**

靜態順序表

動態順序表定義如下

typedef int datatype;

#define init_capacity (3)

typedef struct seqlistd

seqlistd;

相關**

動態順序表

動態順序表 vs 靜態順序表

動態順序表的插入操作加入了擴容機制。也就是說其容量是可以動態增加的,在堆上申請空間。而靜態順序表的容量是固定的。

還有一點需要注意的是,由於動態順序表的容量是在堆上申請的,在對其不用的情況下,也就是銷毀動態順序表的時候一定要free( ); 以免造成記憶體洩漏。

線性表之順序表

資料結構草草學過,不過沒有認真運用過。雖然知道一些最為基本的抽象型別及一些常用操作,不過叫我把這些基本的演算法寫出來我也 是寫不出來的。因為常說資料結構 演算法是乙個程式設計師最基本的素質,所以這次認真加以複習。在複習的同時我盡量將自己學習的其他的 一些基本知識比如c 中的物件導向思想也引入進來,同...

線性表之順序表

線性表 我們都知道是一種常用的資料結構,也是歷來各種考試的重點。今天抽了一些時間把線性表做了總結。線性表是n個資料元素的乙個有限序列。用公式表示為 l a1,a2,a3,a4,an 因為線性表是乙個有限的序列,所以也如上面公式所示,它的各個元素是相繼排放的。那麼它的每個相連的兩項之間都是有乙個邏輯關...

線性表之順序表

線性表的操作 initlist l 初始化操作,建立乙個空的線性表l。listempty l 判斷線性表是否為空表,空返回true,否則返回false。clearlist l 將線性表清空。getelem l,i,e 將線性表l中的第i個位置元素值返回給e。listdelete l,i,e 刪除線性...