<span style="font-size:24px;">#pragma once
#include<iostream>
using namespace std;
#define DefauleCapacity 5
typedef int DataType;
class Seqlist
{
public:
//构造函数
Seqlist()
:_array(new DataType[DefauleCapacity])
{
_capacity = DefauleCapacity;
_size = 0;
}
Seqlist(DataType* array, size_t size, size_t capacity)
{
_array = new DataType[capacity];
memcpy(_array, array, sizeof(DataType)*size);
_size = size;
_capacity = capacity;
}
//拷贝构造函数
Seqlist(const Seqlist& sList)
:_array(NULL)
, _size(0)
, _capacity(0)
{
Seqlist tmp(sList._array, sList._size, sList._capacity);
Swap(tmp);
}
//赋值操作符的重载
Seqlist& operator=(const Seqlist& sList)
{
if (this != &sList)
{
Seqlist tmp(sList);
Swap(tmp);
}
return *this;
}
//析构函数
~Seqlist()
{
if (_array)
{
delete[] _array;
}
_size = 0;
_capacity = 0;
}
void Swap(Seqlist& s)
{
swap(_array, s._array);
swap(_size, s._size);
swap(_capacity, s._capacity);
}
//检查容量
void CheckCapacity()
{
if (_size == _capacity)
{
DataType* tmp=new DataType[2 * _capacity];
memcpy(tmp, _array, sizeof(DataType)*_size);
delete[] _array;
_array = tmp;
_capacity = 2 * _capacity;
}
}
//尾插
void PushBack(const DataType& x)
{
CheckCapacity();
_array[_size ] = x;
_size++;
}
//尾删
void PopBack()
{
if (_size == 0)
{
cout << "此链表为空!" << endl;
}
_size--;
}
//头插
void PushFront(const DataType& x)
{
CheckCapacity();
for (size_t i = _size; i > 0; i--)
{
_array[i] = _array[i - 1];
}
_array[0] = x;
_size++;
}
//头删
void PopFront()
{
if (_size == 0)
{
cout << "此链表为空!" << endl;
}
for (size_t i = 0; i < _size - 1; i++)
{
_array[i] = _array[i + 1];
}
_size--;
}
//打印
void print()
{
for (size_t i = 0; i < _size; i++)
{
cout << _array[i] << "->";
}
cout << endl;
}
//任意位置插入
void Insert(size_t index, const DataType& x)
{
CheckCapacity();
if (index>_size)
{
cout << "无此下标!" << endl;
}
for (size_t i = _size; i > index; i--)
{
_array[i] = _array[i-1];
}
_array[index] = x;
_size++;
}
//修改
void Modfied(size_t index, const DataType& x)
{
if (index>_size)
{
cout << "无此下标!" << endl;
}
_array[index] = x;
}
//任意位置删除
void Remove(size_t index)
{
if (_size == 0)
{
cout << "此链表为空!" << endl;
}
if (index>_size)
{
cout << "无此下标!" << endl;
}
for (size_t i = index; i < _size; i++)
{
_array[i] = _array[i+1];
}
_size--;
}
//friend istream& operator>>(istream& is,Seqlist& s);
//friend ostream& operator<<(ostream& os, Seqlist& s);
private:
DataType* _array;
size_t _size;
size_t _capacity;
};
//istream& operator>>(istream& is, Seqlist& s)
//{
// for (size_t i = 0; i < s._size; i++)
// {
// is >> s._array[i];
//}
//return is;
//
//& operator<<(ostream& os, Seqlist& s)
//
// for (size_t i = 0; i < s._size; i++)
// {
// os << s._array[i]<<"->";
// }
// return os;
//}
/*void PromptInfo()
{
cout << "****1.PushBack 2.PopBack****" << endl;
cout << "****3.PushFront 4.PopFront***" << endl;
cout << "****5.Insert 6.Modfied****" << endl;
cout << "****7.Remove 8.Exit!******" << endl;
}
int main()
{
size_t input;
size_t index;
Seqlist s1;
DataType x;
//cout << "请输入顺序表中的数字" << endl;
//cin >> s1;
while (1)
{
PromptInfo();
cout << "请选择:" << endl;
cin >> input;
switch (input)
{
case 1:
cout << "请输入要加的数字:" << endl;
cin >> x;
s1.PushBack(x);
cout << s1 << endl;
break;
case 2:
s1.PopBack();
cout << s1 << endl;
break;
case 3:
cout << "请输入要加的数字:" << endl;
cin >> x;
s1.PushFront(x);
cout << s1 << endl;
break;
case 4:
s1.PopFront();
cout << s1 << endl;
break;
case 5:
cout << "请输入要加的位置的下标" << endl;
cin >> index;
cout << "请输入要加的数字:" << endl;
cin >> x;
s1.Insert(index, x);
cout << s1 << endl;
break;
case 6:
cout << "请输入要修改的位置的下标" << endl;
cin >> index;
cout << "请输入要修改的数字:" << endl;
cin >> x;
s1.Modfied(index, x);
cout << s1 << endl;
break;
case 7:
cout << "请输入要删除的位置的下标" << endl;
cin >> index;
s1.Remove(index);
cout << s1 << endl;
break;
case 8:
cout << "Exit!" << endl;
return 0;
default:
cout << "输入选项错误,请重新输入!" << endl;
}
}
return 0;
}*/
void Test1()
{
Seqlist s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.print();
Seqlist s2(s1);//测试拷贝复制
s2.print();
Seqlist s3;
s3 = s1;//测试赋值操作符的重载
s3.print();
}
void Test2()
{
Seqlist s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.print();
s1.PopBack();
s1.print();
s1.PushFront(0);
s1.print();
s1.PopFront();
s1.print();
s1.Insert(1, 5);
s1.print();
s1.Remove(1);
s1.print();
s1.Modfied(2, 6);
s1.print();
}
int main()
{
Test1();
Test2();
return 0;
}</span>【C++】实现顺序表
最新推荐文章于 2023-12-04 19:04:31 发布
1520

被折叠的 条评论
为什么被折叠?



