#C/C++泛型编程实现数据结构之线性表
泛型编程与面向对象编程的目标相同,即使重用代码和抽象通用概念的技术更加简单。但是面向对象编程强调编程的数据方面,泛型编程强调的是独立于特定数据类型。侧重点不同。
template <typename DataType,int MaxSize>
class Liner_table {
private:
public:
DataType data[MaxSize];
int length;
public:
Liner_table(DataType arr[]) { //构造函数,初始化线性表
length = 0;
for (int i = 0; arr[i]!='\0'; i++) {
if (i > MaxSize) { cout << "error" << endl;}
data[i] = arr[i];
}
}
int ListLength() { //求线性表长度
return length;
}
DataType GetNode(int position) { //返回线性表position位置上的元素值
if(position <= length){
return data[position];
}
}
int LocateNode(DataType data_info) { //在线性表中查找元素data_info的位置
for (int i = 0; i < length; i++)
{
if ( date[i] == data_info) {
return i;
}
else {
return -1;
}
}
}
bool InsertList(int position, DataType value) { //在线性表位置为position前插入元素data
if ( length + 1 < MaxSize) {
for (int i = this->length+1; i > position; i++) {
data[i] = data[i-1];
}
++ length;
this->data[position] = value;
return true;
}
else {
return false;
}
}
bool DeleteList(int position) { //删除线性表位置为position的元素
if ( length - 1 < 0) {
return false;
}
else {
for (int i = position; i <= length - 1; i++) {
data[i] = data[i + 1];
}
-- length;
return true;
}
}
void purge() { //删除线性表中所有的重复元素
for (int i = 0; i < length; i++) {
for (int j = i + 1; j <= length; j++) {
if (data[i] == GetNode(j)) {
DeleteList(i);
}
}
}
}
DataType Find_max_value() {
DataType max = GetNode(0);
for (int i = 1; i <= length; i++) {
if (max < GetNode(i)) {
max = GetNode(i);
}
}
return max;
}
};