資料結構 順序表
主要的成員函式:(除去建構函式以及析構函式)
函式名功能
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...