顺序表的接口
#pragma once
#include<iostream>
#include<algorithm>
const int defaultSize = 3;
class SeqList
{
private:
int Size;//表长
int* Array;//动态数组
int Curr;//当前位置的数组下标
int maxSize;//数组最大长度
public:
SeqList(int size=defaultSize);
void Init(int size);//动态数组的初始化
void reSize(int newSize);//重新设置数组大小
void Insert(int ele);//在当前位置后插入元素
void Insert(int ele, int pos); //在指定位置后插入元素
void Emit();//删除当前位置的元素
void Emit(int pos);//删除指定位置的元素
bool isEmpty();//判空
bool isFull();//判满
int getMaxSize();//获取表的最大长度
void Print();//输出表的元素
int At(int ele);//根据元素查找位置
int Find(int pos);//根据位置查找元素
void Append(int ele);//将表向后拓展一位
int getSize();//获取表长
};
顺序表表长的重新设置
1.判断新表长是否合理
2.将maxSize设为新表长
3.重新声明一个新数组
4.将旧数组的数组赋值给新数组
5.删除旧数组
6.将新数组设置为Array
void SeqList::reSize(int newSize)
{
if (newSize < 0)
{
cerr << "Invalid Data" << endl;
}
if (newSize != maxSize)
{
maxSize = newSize;
int* newArray = new int[maxSize];
if (newArray == nullptr)
{
cerr << "Memory allocate error" << endl;
exit(0);
}
for (int i = 0; i < maxSize; i++)
{
newArray[i] = Array[i];
}
delete[] Array;
Array = newArray;
}
}
顺序表的基本操作
1.顺序表的初始化
SeqList::SeqList(int size)
:maxSize(size),Size(0),Curr(0)
{
if (size < 0)
cerr << "Invalid Data" << endl;
Init(size);
}
void SeqList::Init(int size)
{
Array = new int[size];
}
2.插入操作
1.在当前位置后插入一个元素
void SeqList::Insert(int ele)
{
for (int i = Size; i >Curr; i--)
{
Array[i] = Array[i - 1];
}
Size++;
Array[Curr] = ele;
}
2.在指定位置后插入一个元素
void SeqList::Insert(int ele, int pos)
{
if (pos < 0 || pos >= maxSize)
{
cerr << "Invalid Position" << endl;
return;
}
else
{
Size++;
for (int i = Size; i > pos; i--)
{
Array[i] = Array[i - 1];
}
Array[pos] = ele;
}
}
3.删除操作
1.删除当前位置的元素
void SeqList::Emit()
{
for (int i = Curr; i < Size-1; i++)
{
Array[i] = Array[i + 1];
}
Size--;
}
2.删除指定位置的元素
void SeqList::Emit(int pos)
{
if (pos < 0 || pos >= Size)
{
cerr << "Invalid Position" << endl;
return;
}
else
{
for (int i = pos; i < Size - 1; i++)
{
Array[i] = Array[i + 1];
}
Size--;
}
}
4.判空/判满
bool SeqList::isEmpty()
{
return Size==0;
}
bool SeqList::isFull()
{
return Size<=maxSize;
}
查找操作
1.按照元素查找
int SeqList::At(int ele)
{
for (int i = 0; i < Size; i++)
{
if (Array[i] == ele)return i;
}
}
2.按照位置查找
int SeqList::Find(int pos)
{
return Array[pos];
}
其他操作
1.向后延展一位
void SeqList::Append(int ele)
{
if (Size + 1 <= maxSize)
{
Array[Size] = ele;
Size++;
}
else
{
reSize(Size + 1);
Array[Size] = ele;
Size++;
}
}
2.获取表长
int SeqList::getSize()
{
return Size;
}
测试函数
#include<iostream>
using namespace std;
#include<random>
#include"SeqList.h"
int main()
{
SeqList test;
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(1, 10);
int time;
cin >> time;
for (int i = 0; i < time; i++)
{
int ele;
ele = dis(gen);
//cin >> ele;
test.insert(ele);
}
cout << "表中元素为:" << endl;
test.display();
cout << endl;
cout << "表的大小为:" << test.getSize() << endl;
test.erase(9);
test.display();
}