您的位置:首页 > 其它

顺序表

2015-08-26 15:26 218 查看
#include<iostream>
using namespace std;
typedef int DataType;
class  SeqList
{
public:
SeqList()
:_array(new DataType[3])
, _size(0)
, _capicity(3)
{}
SeqList(DataType *array, DataType size, DataType capicity)
{
if (array == NULL)
{
_array = new DataType[1];
_array[0] = 1;
_size = 0;
_capicity = 0;
}
else
{
_array = new DataType[capicity];
memcpy(_array, array, sizeof(DataType)*size);
_size = size;
_capicity = capicity;
}

}
////拷贝构造函数
//SeqList(const SeqList& sList)
//{
//	_capicity = sList._capicity;
//	_array = new DataType[_capicity];
//	_size = sList._size;
//	memcpy(_array, sList._array, sizeof(DataType)*_size);
//}
////赋值运算符重载
//SeqList& operator=(const SeqList& sList)
//{
//	if (this != &sList)
//	{
//		delete[]_array;
//		_capicity = sList._capicity;
//		_array = new DataType[_capicity];
//		_size = sList._size;
//		memcpy(_array, sList._array, sizeof(DataType)*_size);
//	}
//	return *this;
//}
//优化写法
void Swap(SeqList& sList)
{
swap(_array, sList._array);
swap(_size, sList._size);
swap(_capicity, sList._capicity);
}
//拷贝构造函数
SeqList(const SeqList& sList) :_array(NULL)
{
SeqList tmp(sList._array, sList._size, sList._capicity);
Swap(tmp);
}
//赋值运算符重载
SeqList& operator=(const SeqList& sList)
{
if (this != &sList)
{
SeqList tmp(sList._array, sList._size, sList._capicity);
Swap(tmp);
}
return *this;
}
~SeqList()
{
if (_array)
{
delete[]_array;
}
_size = 0;
_capicity = 0;
}
void Print()
{
int i = 0;
for (; i<(int)_size; i++)
{
cout<<_array[i]<<" ";
}
cout << endl;
cout << "size=" << _size << " "<<"capicity="<<_capicity<<endl;
}
void ExpandSeqList()
{
DataType* tmp = NULL;
if (_size ==_capicity)
{
DataType* tmp = new DataType[2*_capicity];
_capicity= _capicity * 2;
memcpy(tmp, _array, sizeof(DataType)*_size);
delete []_array;
_array = tmp;
}
}

void PushBack(const DataType& x)
{
ExpandSeqList();
_array[_size++] = x;
}
void PopBack()
{
if (_size == 0)
{
return;
}
_size--;
}
void PushFront(const DataType& x)
{
ExpandSeqList();
for (int i =(int) _size-1; i >= 0; i--)
{
_array[i + 1] = _array[i];
}
_array[0] = x;
_size++;
}
void PopFront()
{
if (_size == 0)
{
return;
}
for (int i = 1; i <(int)_size; i++)
{
_array[i -1] = _array[i];
}
_size--;
}
//插入到index位置上
void Insert( DataType index, DataType x)
{
int i = 0;
ExpandSeqList();
for (i =_size - 1; i >= index; i--)
{
_array[i + 1] = _array[i];
}
_array[index] = x;
++_size;
}

//修改index位置上的
void Modified(DataType index, DataType x)
{
if (index > _size-1);
{
return;
}
_array[index] = x;
}

//删除index位置上的
void Removed( DataType index)
{
int i = 0;
if (index >_size-1)
{
return;
}
for (i = index + 1; i<_size; i++)
{
_array[i - 1] =_array[i];
}
--_size;
}

//查找数据,
DataType Find(DataType x,int index)
{
for (int i = index; i < _size; i++)
{
if (_array[i] == x)
{
return  i;
}
}
return -1;
}
//删除数据X,flag==1,删除所有X
void Erase(DataType x, int flag)
{
int index = Find(x, 0);
while (index != -1)
{
Removed(index);
if (flag == 1)
{
index = Find(x, index);
}
else
{
return;
}
}
}
//冒泡排序
void BubbleSort()
{
int i = 0;
int j = 0;
int exchange = 0;
for (i =(int) _size-1; i >0; i--)
{
for (j = 0; j <i; j++)
{
if (_array[j] > _array[j + 1])
{
int tmp = _array[j];
_array[j] = _array[j + 1];
_array[j + 1] = tmp;
exchange = 1;
}
}
if (exchange == 0)
{
break;
}
}
}
//选择排序
void SelectSort()
{
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i<(int)_size - 1; i++)
{
k = i;
for (j = i + 1; j<(int)_size; j++)
{
if (_array[k]<_array[j])
{
k = j;
}
}
if (k != i)
{
int tmp = _array[i];
_array[i] = _array[k];
_array[k] = tmp;
}
}
}
//二分搜索
int BinarySearch(DataType x)
{
int left = 0;
int right = _size - 1;
while (left <= right)
{
int mid = (right - left) / 2 + left;
if (_array[mid] == x)
{
return mid;
}
if (_array[mid] > x)
{
left = mid + 1;
}
if (_array[mid] < x)
{
right = mid - 1;
}
}
return -1;
}
private:
DataType *_array;
size_t _size;
size_t _capicity;
};
int main()
{
SeqList op1;
op1.PushBack(1);
op1.PushBack(2);
op1.PushBack(3);
op1.PushBack(4);
op1.PushBack(5);
op1.Print();
op1.SelectSort();
op1.Print();
int ret=op1.BinarySearch(8);
cout << "ret="<<ret << endl;
/*op1.PushBack(5);
op1.PushBack(6);
op1.PushBack(3);
op1.PushBack(8);
op1.Print();
op1.Erase(3, 1);
op1.Print();*/
/*op1.Insert(5, 100);*/
//op1.Modified(5, 100);
/*op1.removed(3);*/
/*int i=op1.find(6);
cout << i << endl;*/
//op1.Print();
/*op1.PopBack();
op1.PopBack();
op1.Print();*/
/*op1.PushFront(100);
op1.Print();*/
/*op1.PopFront();
op1.Print();*/
/*SeqList op2 = op1;;
op2.Print();
SeqList op3;
op3 = op1;
op3.Print();*/
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: