真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++如何實(shí)現(xiàn)動(dòng)態(tài)線性表

這篇文章主要為大家展示了C++如何實(shí)現(xiàn)動(dòng)態(tài)線性表,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司專(zhuān)注于都安企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。都安網(wǎng)站建設(shè)公司,為都安等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì)網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

C++如何實(shí)現(xiàn)動(dòng)態(tài)線性表

這里使用指針來(lái)遍歷數(shù)組,這樣在算size,capacity的時(shí)候,直接用指針相減的方式就可以得到元素個(gè)數(shù),以及容量。

Vector.h

#include 
#include
#include
#include
//用typedef定義int為存儲(chǔ)類(lèi)型,想更改直接更改這一句即可。
typedef int DataType;

class Vector
{
public:
  //構(gòu)造函數(shù)。
  Vector()
  {
    _first = new DataType[3];
    _finish = _first;
    _endofstorage = _first + 3;
  }
  //拷貝構(gòu)造
  Vector(const Vector& v)
  {
    _first = new DataType[v.Size()];
    memmove(_first, v._first, v.Size()*sizeof(DataType));
    _finish = _first + v.Size() ;
    _endofstorage = _finish ;
  }
  //賦值運(yùn)算符的重載
  Vector& operator=(Vector v);
  //析構(gòu)函數(shù)
  ~Vector()
  {
    delete[] _first;
  }
  //順序表的有效長(zhǎng)度
  size_t Size() const
  {
    return _finish - _first ;
  }
  //順序表的容量
  size_t Capacity() const
  {
    return _endofstorage - _first ;
  }
  //擴(kuò)容順序表
  void Expand(size_t n);
  //尾插
  void PushBack(DataType x);
  //截取容量
  void Reserve(size_t n);
  //尾刪
  void PopBack();
  //任意位置插入
  void Insert(size_t pos, DataType x);
  //任意位置刪除
  void Erase(size_t pos);
  //查找元素
  size_t Find(DataType x);
  //打印當(dāng)前順序表
  void Print();
private:
  //指向第一個(gè)元素的指針
  DataType* _first;
  //指向最后一個(gè)有效元素的下一個(gè)位置
  DataType* _finish;
  //順序表容量的下一個(gè)位置
  DataType* _endofstorage;
};

Vector.cpp

#include"Vector_List1.h"

  //賦值運(yùn)算符的重載可以使用傳值的方式進(jìn)行
  //在傳值的時(shí)候默認(rèn)調(diào)用了拷貝構(gòu)造函數(shù),進(jìn)行了深拷貝
  //而當(dāng)前這個(gè)傳入的v就是我們想要的賦值之后的結(jié)果
  //將當(dāng)前的順序表與順序表v一交換,就可以不用再自己實(shí)現(xiàn)深拷貝
  Vector& Vector::operator=(Vector v)
  {
    size_t size = v.Size();
    DataType *tmp = v._first;
    v._first = _first;
    _first = tmp;
    _finish = _first + size;
    _endofstorage = _finish;
    return *this;
  }
  void Vector::Expand(size_t n)
  {
    DataType *tmp = new DataType[n];
    size_t size = Size();
    memmove(tmp, _first, Size()*sizeof(DataType));
    delete[] _first;
    _first = tmp;
    _finish = _first + size;
    _endofstorage = _first + n;
  }
  void Vector::PushBack(DataType x)
  {
    if (_finish > _endofstorage)
      Expand(2 * Capacity());
    *_finish = x;
    _finish++;
  }
  void Vector::PopBack()
  {
    assert(_first < _finish);
    _finish--;
  }
  void Vector::Insert(size_t pos, DataType x)
  {
    assert(pos= _endofstorage)
      Expand(2*Capacity());
    memmove(_first+pos+1,_first+pos,Size()-pos+1);
    *(_first+pos) = x;
  }
  void Vector::Erase(size_t pos)
  {
    assert(poscapacity擴(kuò)容,
    if(n Size() ? n : Size());
      return;
    }
    else if(n>Capacity())
    {
      Expand(n);
      return;
    }
    else
      return;
  }   
  void Vector::Print()
  {
    DataType *tmp = _first;
    while (tmp != _finish)
    {
      printf("%d ", *tmp);
      tmp++;
    }
    printf("\n");
  }
int main()
{
  Vector v;
  Vector v1(v);
  v.PushBack(1);
  v.PushBack(2);
  v.PushBack(3);
  v.PushBack(4);
  v.PushBack(5);
  v.PushBack(6);
  v.Print();
  v1 = v;
  v1.Print();
  v1.Erase(2);
  v1.Print();
  size_t ret = v1.Find(3);
  printf("%lu\n",ret);
  ret = v1.Find(2);
  printf("%lu\n",ret);
  ret = v1.Find(5);
  printf("%lu\n",ret);
  v1.Reserve(3);
  v1.Print();
  return 0;
}

以上就是關(guān)于C++如何實(shí)現(xiàn)動(dòng)態(tài)線性表的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。


文章名稱(chēng):C++如何實(shí)現(xiàn)動(dòng)態(tài)線性表
URL鏈接:http://weahome.cn/article/pjsdej.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部