【一】 数据结构之Vector

这篇博客主要介绍了C++中的向量数据结构——Vector,它作为一种抽象数据类型ADT,与数组不同,具备更多功能。内容源于邓俊辉老师的学堂在线数据结构课程。虽然没有直接列出所有接口实现,但提及了将在后续的stack和queue扩展中进一步讨论Vector的使用。
摘要由CSDN通过智能技术生成

【一】 数据结构之Vector

我们这里的数据结构是C++版本的,需要对C++有一点了解
内容大部分来源于网络视频课程,这里推荐观看学堂在线,自主课堂的邓俊辉老师的数据结构课程。
向量是一种抽象数据类型ADT,与数组不同,它提供了很多接口,能够实现更多的功能。如何理解ADT抽象数据类型,看下面这幅图片(图片均来源于学堂在线,引用请标注出处)
ADT提供了很多接口
OK那么Vector给我们提供了哪些接口呢?

这里写图片描述
接下来贴出这些接口的具体实现
vector.h

#ifndef VECTOR_H
#define VECTOR_H

#include "Fib.h"
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();//装填因子过小时压缩
    Rank 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, Rank lo, Rank hi){
  //向量区间
        copyFrom(V._elem, lo, hi);
    }
    Vector(Vector<T> const& V){
  //向量整体复制
        copyFrom(V._elem, 0, v._size);
    }
    //析构函数
    ~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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值