C++之顺序表
来源:互联网 发布:tcp端口怎么打开 编辑:程序博客网 时间:2024/06/01 16:05
顺序表的实现
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>#include<string.h>
#include<assert.h>
using namespace std;
typedef int DataType;
class SeqList
{
public:
SeqList();
SeqList(DataType arr[], size_t size);
SeqList(const SeqList& d);
SeqList& operator=(const SeqList& s);
~SeqList();
public:
void PushBack(const DataType& d);
void PopBack();
void Insert(size_t pos, const DataType& d);
void Erase(size_t pos);
bool Empty()const;
size_t Size()const;
size_t Capacity()const;
DataType& operator[](size_t index);
const DataType& operator[](size_t index)const;
DataType& Front();
const DataType& Front()const;
DataType& Back();
const DataType& Back()const;
int Find(const DataType& d);
void Clear();
private:
void _CheckCapacity()
{
if(_size >= _capacity)
{
DataType *newspace = new DataType[2*_capacity];
size_t i = 0;
for(i=0; i<_size; i++)
{
newspace[i] = _pArr[i];
}
delete []_pArr;
_pArr = NULL;
_pArr = newspace;
_capacity *= 2;
}
}
private:
size_t _size; //
size的意思是大小,此方法是返回该vector对象当前有多少个元素。
size_t _capacity; //
capacity的意思是容量,此方法返回的是该vector对象最多能容纳多少个元素。
DataType* _pArr;
};
SeqList::SeqList() //普通构造函数
:_size(0)
,_capacity(3)
,_pArr(new DataType[_capacity])
{}
SeqList::SeqList(DataType arr[], size_t size)//数组构造函数
:_size(size)
,_capacity(size)
,_pArr(new DataType[size])
{
memcpy(_pArr,arr,size*sizeof(DataType)); //三个参数 目标参数 源参 字节大小
}
SeqList::SeqList(const SeqList& d) //普通拷贝构造函数
:_pArr(new DataType[d._capacity])
,_capacity(d._capacity)
,_size(d._size)
{
size_t i = 0;
for(i=0; i<_size; i++)
{
_pArr[i] = d._pArr[i];
}
};
SeqList& SeqList::operator=(const SeqList& s) //普通赋值运算重载
{
if(this != &s)
{
DataType* temp = _pArr;//保存原地址
_pArr = new DataType[s._capacity];
_size = s._size;
_capacity = s._capacity;
delete []temp;
size_t i = 0;
for(i=0; i<s._size; i++)
{
_pArr[i] = s._pArr[i];
}
}
return *this;
}
SeqList::~SeqList() //析构函数
{
if(NULL != _pArr)
{
delete []_pArr;
_pArr = NULL;
_capacity = 0;
_size = 0;
}
}
void SeqList::PushBack(const DataType& d)//尾插法
{
assert(_pArr);
_CheckCapacity();
_pArr[_size] = d;
_size++;
}
void SeqList::PopBack()//头插
{
assert(_pArr);
if(Empty())
{
assert(false);
return;
}
_size--;
}
void SeqList::Insert(size_t pos, const DataType& d) //插入在pos之后插入d
{
assert(pos>=0 && pos<_size);
_CheckCapacity();
size_t i = 0;
for(i=_size; i>pos; i--)
{
_pArr[i] = _pArr[i-1];
}
_pArr[pos] = d;
_size++;
}
void SeqList:: Erase(size_t pos) //删除第pos个元素
{
assert(pos >=0&&pos<_size);
if(_size == 0)
return ;
else
{
size_t i = 0;
for(i=pos;i<_size-1;i++)
{
_pArr[i] = _pArr[i+1];
}
_size--;
}
}
bool SeqList:: Empty()const //置空
{
return _size == 0;
}
size_t SeqList::Size()const
{
return _size;
}
size_t SeqList::Capacity()const
{
return _capacity;
}
DataType&SeqList::operator[](size_t index)
{
if(index < _size)
{
return _pArr[index];
}
}
const DataType& SeqList::operator[](size_t index)const
{
return _pArr[index];
}
DataType& SeqList::Front()
{
assert(_size>0);
return _pArr[0];
}
const DataType& SeqList::Front()const
{
assert(_size>0);
return _pArr[0];
}
DataType&SeqList::Back()
{
assert(_size>0);
return _pArr[_size-1];
}
const DataType& SeqList::Back()const
{
assert(_size > 0);
return _pArr[_size-1];
}
int SeqList::Find(const DataType& d)
{
size_t i = 0;
for(i=0; i<_size; i++)
{
if(_pArr[i] == d)
return i;
}
return -1;
}
void SeqList::Clear()
{
if(NULL != _pArr)
{
delete []_pArr;
}
}
void Funtest()
{
int arr[5] = {0};
SeqList s1;
SeqList s2(arr,5);
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
cout<<s1<<endl;
s1.PopBack();
cout<<s1<<endl;
s1.Insert(1,5);
cout<<s1<<endl;
s1.Erase(1);
cout<<s1<<endl;
int ret = s1.Find(2);
if(ret == -1)
cout<<"未找到元素"<<endl;
else
cout<<ret<<endl;
ret = s1.size();
cout<<ret<<endl;
ret = s1.Capacity();
cout<<ret<<endl;
ret = s1.Back();
cout<<ret<<endl;
ret = s1.Front();
cout<<ret<<endl;
bool r = s1.Empty();
cout<<r<<endl;
s2 = s1;
cout<<s2<<endl;
}
int main()
{
Funtest();
system("pause");
return 0;
}
0 0
- c语言之顺序表
- C数据结构-线性表之顺序表
- C语言线性表之顺序表
- C学习之顺序表(数组篇)
- C学习之顺序表(指针篇)
- 数据结构C语言实现之顺序表
- 数据结构(c语言版)之顺序表
- c语言学习之顺序表操作
- c语言数据结构之顺序表
- 简单数据结构之顺序表(C实现)
- C语言学习之顺序表详解
- 线性结构之顺序表------C实现
- [C++] 数据结构之顺序栈
- [C++] 数据结构之顺序队列
- 线性表玩具之顺序表版本(C语言)
- 数据结构之---c语言实现线性表的顺序表
- 线性表之顺序表(C语言实现)
- (续)顺序表之单循环链表(C语言实现)
- Android软键盘的隐藏显示研究
- 全概率公式、贝叶斯公式推导过程
- 硅谷创业名人
- 苏嵌的第一课
- 背包问题
- C++之顺序表
- 李开复-算法的力量(转)
- app的登录认证与安全
- 汇编语言程序
- 研究前端,javascript的cnblog
- 静态类和静态成员小结
- VS2015编译64位GDAL
- 浅谈js单线程
- 初识嵌入式