前言
时光不负有心人,星光不问赶路人。
心血来潮,想实现一遍数据结构的算法。
努力做好这件事吧,在csdn做个记录
这是第三次实现数据结构算法,每实现一次感受都不一样,侧重点也不一样
但每次都受益匪浅
前两次都是面向过程的实现,这次挑战一下,以面向对象的方法实现,也算给自己建一个算法类库吧!!!
顺序表
/*
chp
更新时间:2020/12/4 22:19
持续更新
*/
#include <iostream>
#include <algorithm>
//#define maxSize 30
typedef int DataType;
using namespace std;
/*
顺序表的查找、删除和插入算法的时间复杂度都都是O(n)
当n很大时,执行效率非常低,造成此缺陷的原因是:为保持表中的元素的原有顺序不变,
在插入和删除时数据必须成块的移动,当数据量很大时,运算量非常可怕
所以顺序表主要用于不经常插入或删除的应用程序,但顺序表的其他操作时间复杂度都是O(1)
顺序表有直接(随机)存取的特性
*/
//顺序表类
class SeqList
{
private:
DataType *data; //数据域
int size; //数据个数
const int maxSize=30; //最大长度
//构造函数
public:
SeqList()
{
ininList();
}
//顺序表初始化函数
void ininList()
{
data = new DataType();
if (!data)
{
cout << "无可用的空间,内存分配错误!!!";
}
size = 0; //长度置零
//Maxsize = maxSize;
}
//清空顺序表
void clearList()
{
size = 0;
}
//返回最大长度
int maxsize(){
return maxSize;
}
//返回顺序表现有长度
int Length()
{
return size;
}
//按值查找,时间复杂度O(n),最好情况只需比较1次,最差为size(表的长度)
int search(DataType x)
{
for (int i = 0; i < size; i++)
{
//成功找到
if (data[i] == x)
{
return i;
}
}
//查询失败
return -1;
}
//输出表中元素,时间复杂度O(n)
void show()
{
if (size == 0)
{
cout << "表空!!!" << endl;
return;
}
for (int i = 0; i < size; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
//将新元素插入到第i的位置,即data数组的i-1下标对应位置,,时间复杂度O(n)
//最好情况移动0次,即在size+1位置插入,最差为移动size(表的长度),即在第一个位置插入
int insert(DataType &x, int i)
{
//判断表是否满
if (size == maxSize)
{
cout << "表已满,插入失败!!!" << endl;
return 0;
}
//检查插入顺序是否合法
if (i > maxSize || i < 1)
{
cout << "插入位置越界!!!" << endl;
return 0;
}
//从后向前移动后(L-i+1)个元素,以便给要插入的元素腾出位置,,时间复杂度O(n)
for (int j = size; j >= i; j--)
{
data[j] = data[j - 1];
}
data[i - 1] = x;
//表的长度加1
size++;
//返回插入在data数组的下标
return i - 1;
}
//删除第i个元素,即data数组的i-1下标对应位置,,时间复杂度O(n)
//最好情况只需移动0次,即删除第size个元素,最差为size-1,即删除第一个元素
DataType remove(int i)
{
//判断表是否为空
if (!size)
{
cout << "表空,没有要删除的元素!!!";
return 0;
}
//判读删除位置是否合法
if (i < 1 || i > size)
{
cout << "删除位置非法!!!" << endl;
}
DataType x = data[i - 1];
//从前往后移动元素
for (int j = i; j < size; j++)
{
data[j - 1] = data[j];
}
//表的长度减1
size--;
//返回要删除元素的值
return x;
}
};
int main()
{
SeqList seqList;
for(int i=0;i<10;i++){
DataType x = i;
seqList.insert(x, i+1);
}
seqList.show();
seqList.remove(3);
seqList.show();
return 0;
}