線性表之 順序表

2021-08-13 20:13:12 字數 2150 閱讀 4577

線性表是n個資料元素的有限序列。表中的元素是乙個挨著乙個放的。表中有乙個開始的節點,有乙個結束的節點,並且中間的每乙個節點有且只有乙個前驅和後繼。

線性表的抽象資料型別的定義如下:

data:

線性表中的每資料物件集合,每個資料元素的型別均為datatype(自己定義的,可以是基本型別,也可以是複雜的型別)。其中,除了第乙個元素a1

外,每乙個元素都有且只有乙個直接前驅元素,除了最後乙個元素an

線性表的儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。

當然對於現在的高階語言來說也就是陣列了。一般來說,陣列的零號位置不儲存,會有其它用途。

線性表的順序儲存的描述為:

#include 

#define maxsize 100 // 儲存空間的分配

typedef

int elemtype; // 可以根據實際需要定義

typedef

struct sqlist;

在這之前有一些定義

#include 

#define maxsize 100 // 儲存空間的分配

#define true 1

#define false 0

#define error 0

typedef int elemtype; // 可以根據實際需要定義

typedef struct sqlist;

對於初始化操作來講是很簡單的,就是順序表中的長度制為0。

void initlist(sqlist *l)
順序表的插入指的是在第i個位置插入乙個值為x的新元素,當然在插入後表的長度也就要+1了。如果是在表的最後乙個新增還比較簡單,但是插在表中間的某個位置是,就以為著表的後面的元素全部要移動,就像在食堂排隊買飯,突然有乙個人插隊,假如插在了第二個位置,那麼久意味著後面的人全部要後移。(所以,不提倡插隊)。

插入演算法的設計思路如下:

+ 如果插入的位置不合理,則返回error

+ 如果線性表的長度大於登入陣列長度,則返回error,或者動態增加長度。當然一般是返回error。

+ 從最後乙個向前遍歷到底i個位置,分別將他們向後移動乙個位置

+ 將要插入的元素插在位置i出。

+ 表的長度+1

// 插入操作

// 插入操作

int listinsert(sqlist *l, int i, elemtype x)

// 如果i不在資料元素所在的範圍,返回error

// length+1的原因是可能插入的位置是表尾

if (i < 1 || i > l->length + 1)

// 如果不在表尾

if (i < l->length)

}l->data[i] = x;

l->length++;

return true;

}

刪除操作:就是將順序表中的某乙個元素刪除掉。

刪除就好比現在在食堂排隊買飯,突然隊伍中的某個人不想吃這個飯了,然後離開了,那麼後面的人全部就得向前移動,將哪個位置補上。

刪除演算法的設計思路:

+ 如果刪除位置不對,返回error

+ 將元素取出

+ 然後從刪除的位置開始到最有乙個元素,分別將它們向前移動乙個位置。

+ 表的長度減1

// 刪除操作

int listdelete(sqlist *l, int i, elemtype *e)

l->length--;

return true;

}

順序表的查詢就是遍歷整個序列整個序列來對比查詢。

如果沒找到返回false,找到了返回true

int locationelem(sqlist l,elemtype x) 

return false;

}

順序表的其他操作可以通過可以直接或者間接的實現,比如線性表的長度,可以直接通過l.length得知。

缺點:插入、刪除時需要進行大量的資料交換,時間複雜度高。

優點:可以直接獲得到某個位置上的元素,查詢時方便。

原始碼鏈結

線性表之順序表

資料結構草草學過,不過沒有認真運用過。雖然知道一些最為基本的抽象型別及一些常用操作,不過叫我把這些基本的演算法寫出來我也 是寫不出來的。因為常說資料結構 演算法是乙個程式設計師最基本的素質,所以這次認真加以複習。在複習的同時我盡量將自己學習的其他的 一些基本知識比如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 刪除線性...