网站建设一般多少,义乌哪里做网站好,免费网站建设论文,国有林场网站建设之前实现了java的动态数组#xff0c;试着写了个C版的#xff0c;同样对时间复杂度振荡进行了处理。纯手打#xff0c;代码如下 #xff1a;
//
// Created by PC-Saw on 2018/12/19.
//#ifndef DATA_STRUCTURE_MYARRAY_H
#define DATA_STRUCTURE_MYARRAY_H#include i…之前实现了java的动态数组试着写了个C版的同样对时间复杂度振荡进行了处理。纯手打代码如下
//
// Created by PC-Saw on 2018/12/19.
//#ifndef DATA_STRUCTURE_MYARRAY_H
#define DATA_STRUCTURE_MYARRAY_H#include iostreamusing namespace std;template typename T
class MyArray {
private:int mSize;int mCapacity;T* data;
public:MyArray(); // 无参构造函数explicit MyArray(int Capacity); // 构造函数传入容量CapacityMyArray(const MyArray arr); // 拷贝构造MyArray operator (MyArray arr); // 重载赋值操作符T operator[](int index); // 重载[]操作赋~MyArray(); // 析构函数//友元函数实现 重载输出 操作符friend ostream operator (ostream out, MyArrayT obj){out MyArray size obj.mSize , Capacity obj.mCapacity endl;out MyArray: [;for (int i 0; i obj.mSize; i){out obj.data[i];if (i ! obj.mSize - 1)out , ;}out ] ;return out;}//友元函数实现 输入 操作符friend istream operator (istream in, MyArrayT obj){for (int i 0; i obj.mSize; i) {in obj.data[i];}if (!in){obj new MyArray();}return in;}bool isEmpty(); // 判断数组是否为空bool isFull(); // 判断数组是否已满int find(T t); // 查找元素 t 的下标bool contain(T t); // 判断是否包含元素 tint getSize(); // 获取数组元素个数int getCapacity(); // 获取数组容量void pushFront(T t); // 头部添加元素void pushBack(T t); // 尾部添加元素void insert(int index, T t); // 在指定位置插入元素 tT remove(int index); // 删除指定位元素T removeFront(); // 删除第一个元素T removeBack(); // 删除最后一个元素void removeElement(T t); // 删除元素 tvoid set(int index, T t); // 将指定位置元素设为 tT get(int index); // 查看 index 位置的元素T getBack(); // 返回最后一个元素void resize(int newCapacity); // 重新分配空间
};// 构造函数
template typename T
MyArrayT::MyArray(int Capacity)
{cout 调用 MyArray(int) 构造 endl;if (Capacity 0)throw 传入容量有误;mSize 0;mCapacity Capacity;data new T[Capacity];
};// 无参构造函数
template typename T
MyArrayT::MyArray()
{cout 调用 MyArray() 构造 endl;mSize 0;mCapacity 10;data new T[10];
};// 拷贝构造
template typename T
MyArrayT::MyArray(const MyArrayT arr)
{cout 调用拷贝构造 endl;this-mSize arr.mSize;this-mCapacity arr.mCapacity;this-data new T[arr.mCapacity];// 拷贝数据for (int i 0; i arr.mSize; i) {this-data[i] arr.data[i];}
}// 重载赋值操作符
template typename T
MyArrayT MyArrayT::operator (const MyArrayT arr)
{cout 调用 赋值操作 endl;if (this-data ! NULL){delete[] this-data;this-data NULL;}//分配内存this-mSize arr.mSize;this-mCapacity arr.mCapacity;this-data new T[arr.mCapacity];//拷贝数据for(int i 0; i this-mSize; i){//如果是自定义的复杂数据类型必须对 运算赋进行重载, operatorthis-data[i] arr.data[i];}return *this;
}// 重载[]操作赋
template typename T
T MyArrayT::operator[](int index)
{if (index 0 || index this-mSize - 1)throw 索引非法;return this-data[index];
}// 析构函数
template typename T
MyArrayT::~MyArray()
{cout 调用析构函数 endl;if (this-data ! NULL){delete[] this-data;this-data NULL;}this-mSize 0;this-mCapacity 0;
}// 判断数组是否为空
template typename T
bool MyArrayT::isEmpty()
{return mSize 0;
};// 判断数组是否已满
template typename T
bool MyArrayT::isFull()
{return mSize mCapacity;
};// 查找元素 t 的下标
template typename T
int MyArrayT::find(T t)
{for (int i 0; i mSize; i){if (data[i] t)return i;}return -1;
}// 查找是否包含元素 t
template typename T
bool MyArrayT::contain(T t)
{return (find(t) ! -1);
}// 获取数组元素个数
template typename T
int MyArrayT::getSize()
{return mSize;
}// 获取数组容量
template typename T
int MyArrayT::getCapacity()
{return mCapacity;
}// 头部添加元素
template typename T
void MyArrayT::pushFront(T t)
{insert(0, t);
}// 尾部添加元素
template typename T
void MyArrayT::pushBack(T t)
{insert(mSize, t);
}// 在指定位置插入元素 t
template typename T
void MyArrayT::insert(int index, T t)
{if (index 0 || index mSize) // 判断下标是否有误throw 0;if (isFull()) // 数组已满则重新分配空间resize(2 * mCapacity);for (int i mSize; i index ; --i){data[i] data[i - 1];}data[index] t;mSize;
}// 删除指定位元素
template typename T
T MyArrayT::remove(int index)
{if (index 0 || index mSize) // 判断下标是否合法throw 0;// 删除 index 位置的元素并返回T ret data[index];for (int i index; i mSize - 1; i) {data[i] data[i 1];}mSize--;if (mSize mCapacity / 4 mCapacity / 2 ! 0) // 空闲空间太大重新分配空间resize(mCapacity / 2);return ret;
}// 删除第一个元素
template typename T
T MyArrayT::removeFront()
{return remove(0);
}// 删除最后一个元素
template typename T
T MyArrayT::removeBack()
{return remove(mSize - 1);
}// 删除元素 e
template typename T
void MyArrayT::removeElement(T t)
{int index find(t);index ! -1 remove(index);
}// 将制定位置元素设为 t
template typename T
void MyArrayT::set(int index, T t)
{if (index 0 || index mSize)throw 0;data[index] t;
}// 返回 index 位置的元素
template typename T
T MyArrayT::get(int index)
{if (index 0 || index mSize)throw index is illegal!;return data[index];
}// 返回最后一个元素
template typename T
T MyArrayT::getBack()
{return get(mSize - 1);
}// 重新分配空间
template typename T
void MyArrayT::resize(int newCapacity)
{if (newCapacity 0)throw 0;T* tmp new T[newCapacity];for (int i 0; i mSize; i){tmp[i] data[i];}delete[] data;data tmp;mCapacity newCapacity;
}#endif //DATA_STRUCTURE_MYARRAY_H测试代码
#include iostream
#include MyArray.husing namespace std;int main()
{//cout boolalpha; // 将bool值正常显示MyArrayint arr; for(int i 0; i 10; i) arr.pushBack(i);cout arr endl;arr.pushFront(100);cout arr endl;arr.pushFront(-1);cout arr endl;arr.remove(2);cout arr endl;arr.removeElement(4);cout arr endl;arr.removeFront();cout arr endl;for(int i 0; i 5; i){arr.removeBack();cout arr endl;}return 0;
} 之后还会有其他数据结构的 java 和 C 实现。