資料結構 順序表

2021-09-26 22:40:33 字數 4389 閱讀 4433

資料結構 順序表

主要的成員函式:(除去建構函式以及析構函式)

函式名功能

int size()const

返回順序表的大小

int length()const

返回實際上表中的元素數量

int search(t&x)const

返回表中x所在的位置

int locate(int i)const

返回i所代表的合法位置

bool getdata(int i, t& x)const

返回i處的值是否存在,若存在則儲存至x中

void setdata(int i, t& x)

將i處的值設定為x

bool insert(int i ,t& x)

將x插入i的位置並返回插入是否成功

bool remove(int i, t& x)

刪除i處的值並返回是否刪除成功,同時將刪除的值存入x中

bool isempty()

返回表是否為空

bool isfull()

返回表是否滿

其類定義:

#include

#include

using namespace std;

const

int defaultsize =

100;

template

class seqlist

//標記為const能夠提高程式的可讀性,其保證了函式內部不改變類成員的值

intlength()

const

intsearch

(t& x)

const

;int

locate

(int i)

const

; bool getdata

(int i, t& x)

const

;void

setdata

(int i, t& x)

; bool insert

(int i ,t& x)

; bool remove

(int i, t& x)

; bool isempty()

bool isfull()

void

input()

;//有input函式較易於構造新的順序表

void

output()

; seqlistoperator=

(seqlist

& l);}

;

特別提出:

bool getdata

(int i, t& x)

const

;

這種寫法不直接用函式值返回資料,而是使用bool型,更加安全。其可以先分析輸入的資料合不合法再進行下一步操作,不容易出現危險

通過引用傳值更加簡便,易於操作

特別注意resize()函式:

原來本人寫的:

template

void seqlist::

resize

(int newsize)

書上的**:

template

void seqlist::

resize

(int newsize)

if(newsize != maxsize)

int n = last +1;

t* temp1 = data;

t* temp2 = newarray;

while

(n--

)* temp2++

=*temp1++

; delete[

]data;

data = newarray;

maxsize = newsize;

}}

對比可知1.應該進行特殊值判斷

2.在分配記憶體的時候一定要檢查是否分配成功,因為有可能分配失敗,影響後面的操作

3.注意再輸出錯誤資訊的時候使用cerr,不要使用cout

4.##如果像我這樣操作首先會把儲存的值刪除掉,因為data和newdata指向的是同乙個位址,其次應先進行delete操作,否則再進行轉換後,原先的記憶體位址丟失,無法清理原來的記憶體

盡量再所有分配記憶體的地方先進行判斷是否分配記憶體成功再進行下一步操作

總**:

#include

#include

using namespace std;

const

int defaultsize =

100;

template

class seqlist

intlength()

const

intsearch

(t& x)

const

;int

locate

(int i)

const

; bool getdata

(int i, t& x)

const

;void

setdata

(int i, t& x)

; bool insert

(int i ,t& x)

; bool remove

(int i, t& x)

; bool isempty()

bool isfull()

void

input()

;void

output()

; seqlistoperator=

(seqlist

& l);}

;template

void seqlist::

resize

(int newsize)

if(newsize != maxsize)

int n = last +1;

t* temp1 = data;

t* temp2 = newarray;

while

(n--

)* temp2++

=*temp1++

; delete[

]data;

data = newarray;

maxsize = newsize;}}

template

seqlist::

seqlist

(int size)

template

seqlist::

~seqlist()

template

seqlist::

seqlist

(seqlist

& l)

}template

int seqlist::

search

(t& x)

const

}return0;

}template

int seqlist::

locate

(int i)

const

//此處i是第幾個元素

template

bool seqlist::

getdata

(int i, t& x)

const

else

return false;

}template

void seqlist::

setdata

(int i, t& x)

}template

bool seqlist::

insert

(int i, t& x)

data[i]

= x;

last++

;return true;

}template

bool seqlist::

remove

(int i, t& x)

last--

;return true;

}template

void seqlist::

input()

template

void seqlist::

output()

template

//這裡偷懶了,實際上與拷貝建構函式差不多

seqlist seqlist

::operator=

(seqlist

& l)

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...

資料結構 順序表

順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...

資料結構順序表

include include include include include include include include include include include include include include using namespace std define maxn 100000...