当前位置: 代码迷 >> 综合 >> 第二章 向量
  详细解决方案

第二章 向量

热度:69   发布时间:2024-01-25 15:34:23.0

向量ADT接口

ADT: Abstract Data Type
向量:线性数组的抽象和泛化,故不再限定向量中的各元素都属于同一基本类型。
寻秩访问:对于Vector来说,相当于数组中的元素下标。

size()  元素总数

向量

get(r) 获取秩为r的元素 向量
put(r,e) 用e替换秩为r的元素 向量
insert(r,e) e作为秩为r的元素插入,其他元素后移 向量
remove(r) 删除秩为r的元素 向量
disordered()

判断所有元素是否已按非降序排列

向量
sort() 非降序排列 向量
find(e) 查找等于e且秩最大的元素 向量
search(e) 查找e,返回不大于e且秩最大的元素 有序向量
deduplicate() 剔除重复元素 向量
uniquify() 剔除重复元素 有序向量
traverse() 遍历向量并统一处理所有元素,处理方法由函数对象指定 向量

Vector模板类:

typedef int Rank;
#define DEFAULT_CAPACITY 3template <typename T> class Vector {
protected: Rank _size; int _capacity; T* _elem;void copyFrom(T const* A, Rank lo,Rank hi);void expand();void shrink();bool bubble(Rank lo,Rank hi);void bubbleSort(Rank lo, Rank hi);Rank max(Rank lo, Rank hi);void selectionSort(Rank lo, Rank hi);void merge(Rank lo, Rank mi, Rank hi);void mergeSort(Rank lo, Rank hi);Rank partition(Rank lo, Rank hi);void quickSort(Rank lo, Rank hi);void heapSort(Rank lo, Rank hi);
public://构造函数Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0){_elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v);}Vector(T const* A, Rank n) {copyFrom(A,0,n);}Vector(T const* A ,Rank lo, Rank hi) {copyFrom(A,lo,hi);}Vector(Vector<T> const& V) {copyFrom(V._elem,0,V._size);}Vector(Vector<T> const& V, Rank lo,Rank hi) {copyFrom(V._elem,lo,hi);}//析构函数~Vector() {delete [] _elem;}//只读访问接口Rank size() const {return _size;}bool empty() const {return !_size;}int disordered() const;Rank find(T const& e) const {return find(e,0,_size);}Rank find(T const& e, Rank lo, Rank hi) const;Rank search(T cosnt& e) const{ return ( 0>= _size)?(-1):search(e,0,_size);}Rank search (T const& e, Rank lo, Rank hi) const;//可写访问接口T& operator[] (Rank r) const;Vector<T> & operator= (Vector<T> const&);T remove (Rank r);int remove (Rank lo, Rank hi);Rank insert(Rank r,T const& e);Rank insert(T const& e) {return insert(_size,e);}void sort(Rank lo, Rank hi);void sort() {sort(0,_size);}void unsort(Rank lo, Rank hi);void unsort() {unsort(0,_size);}int deduplicate();int uniquify();//遍历void traverse(void (*) (T&));template <typename VST> void traverse (VST&);
};

 

  相关解决方案