向量—vector 底层实现

最为基本的线性结构统称为序列,根据其中数据项的逻辑次序与其物理存储地址的对应关系不同,又可进一步地将序列区分为向量(vector)和列表(list)。

在向量中,所有数据项的物理存放位置与其逻辑次序完全吻合,此时的逻辑次序也称为秩(rank)。

在列表中,逻辑上相邻的数据项在物理上未必相邻,而是采用间接定址的方式通过封装后的位置(position)相互引用。

 

Vector模板类

/*************************************************************************
	> File Name: vector.h
	> Author: amoscykl
	> Mail: [email protected] 
	> Created Time: 2018年07月02日 星期一 20时51分45秒
 ************************************************************************/

typedef int Rank;	//秩
#define DEFAULT_CAPACITY  3			//默认的初始容量

template <typename T> class  Vector {	//向量模板类
protected:
	Rank _size; int _capacity; T* _elem;		//规模,容量,数据区
	void copyFrom(T const* A, Rank lo, Rank hi);		//复制数据区间A[lo,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)		//容量为c、规模为s、所有元素初始化为v
	{	_elem = new T[_capacity = c]; for( _size = 0; _size < s; _elem[_size++] = v);	}	// s <= c
					/*动态数组*/
	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 const& e) const						//有序向量整体查找
	{	return ( 0 >= _size ) ? -1 : search(e,0,_size); }
	Rank search (T const& e, Rank lo, Rank h
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值