資料結構筆記 2 2線性表的順序儲存結構及實現

2021-09-24 02:05:04 字數 3855 閱讀 1151

順序表的主要操作實現

順序表的應用

順序表的優缺點

線性表的儲存方式有多種,有基於陣列的儲存表示、基於鍊錶的儲存表示、雜湊的儲存表示,其中順序表是線性表基於陣列的儲存表示。

其用一段位址連續的儲存單元,依次儲存線性表中的資料元素。

其特點有

各個表項的邏輯順序與物理順序一致。

對順序表中的所有表項,可以順序訪問,也可以隨機訪問。

順序表可以用c++的一維陣列來實現,c++的一維陣列是可以靜態分配,也可以動態分配的。在傳統的c語言中可用靜態、動態方式描述順序表的儲存。

為保證程式的靈活性,本例採用動態方式定義順序表。用c++的描述順序表的類宣告及部分操作如下。在該定義中,利用了陣列作為順序表的儲存結構,被封裝在類的私有域中。

#include

#include

#include

"linerlist.h"

//將上節定義的順序表模板類作為基類並加入標頭檔案

const

int defaultsize=

100;

template

<

class

t>

class

seqlist

:public linearlist

intsize()

const

int length (

)const

int search ( t& x )

const

;//查詢

int locate (

int i )

const

;//定位

bool

getdata

(int i,t& x)

const

else

return

false;}

void setdata (

int i, t& x)

}int insert (

int i, t & x)

;//插入

int remove (

int i, t & x )

;//刪除

bool isempty (

)bool isfull (

)void

input()

;void

output()

; seqlist

operator

=(seqlist

& l);}

;

注意在搜尋和定位函式中const起保護作用,表示該成員函式不能改變物件的資料的值。且const成員函式不能呼叫非const成員函式。

建構函式

template

<

class

t>

seqlist

:: seqlist (

int sz )

}}

複製建構函式

template

<

class

t>

seqlist

::seqlist

(seqlist

& l)

//傳遞引數為要複製的表

for(

int i=

1; i<=last+

1; i++

)}

當程式呼叫具有seqlist型別返回值的函式時都要使用複製建構函式,用以複製和返回運算結果。如沒有定義建構函式,系統會自動建立乙個複製建構函式來完成以上工作。

重定義陣列大小

template

<

class

t>

//重定義大小

void seqlist

::resize

(int newsize)

if(newsize!=maxsize)

int n=last+1;

//要複製的表項個數

t *srcptr=data;

//獲得原陣列首位址

t *destptr=newarray;

//目的陣列首位址

while

(n--

)//迴圈次數需要複製的表項個數

*destptr++

=*srcptr++

;//把原陣列內的表項一一複製進入新陣列中

delete

data//刪除老陣列空間

data=newarray;

//把data指標指向新陣列

maxsize=newsize;

//更新長度

}}

template

<

class

t>

int seqlist

:: search ( t & x )

const

演算法描述:

如果表滿了,則丟擲上溢異常;

如果元素的插入位置不合理,則丟擲位置異常;

將最後乙個元素至第i個元素分別向後移動乙個位置;

將元素x填入位置i處;

表長加1;

template

<

class

t>

bool seqlist

:: insert (t& x,

int i )

//插入的資料,插入的位置

template

<

class

t>

bool seqlist

:: remove (

int i, t& x )

template

<

class

t>

void seqlist

::input()

for(

int i=

0; i<=last; i++)}

template

<

class

t>

void seqlist

::output()

}

並運算

void union ( seqlist<

int>

& a, seqlist<

int>

& b)

}}

交運算

void intersection ( seqlist<

int>

& a,

seqlist<

int>

& b )

//未找到在a中刪除它

else

i++;}

}

順序表的優點:

無需為表示表中元素之間的邏輯關係而增加額外的儲存空間;

隨機訪問:可以快速地訪問表中任一位置的元素。

順序表的缺點:

插入和刪除操作需要移動大量元素;

表的容量難以確定,表的容量難以擴充;

造成儲存空間的碎片。

資料結構 2 2 線性表的順序表實現

線性表有兩種實現方式,順序表和煉表,順序表作為較簡單的實現方式,可以借用陣列來實現。順序表和煉表各有各自的優缺點,這是由其性質所決定的,在選擇時要根據題目要求,靈活進行選擇。以c 為例,需要定義乙個結構體,結構體中包括乙個陣列 乙個變數代表線性表的最大長度,乙個變數代表線性表的當前已使用長度。這裡需...

資料結構 順序線性表

順序線性表標頭檔案 ifndef vzhangseqlist define vzhangseqlisttypedef void seqlist typedef void seqlistnode 建立線性表 declspec dllexport 如果在動態庫中定義標頭檔案 這句話不可以缺少 不然會報錯...

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...