C++对C的函数部分的扩充
封装
#include <iostream>
#include <memory.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
using datatype = int;
//封装一个顺序表
class SeqList
{
private:
datatype* ptr; //指向堆区空间的起始地址
int size; //总长度
int len = 0; //当前顺序表实际长度
public:
void init(int n)
{
//在堆区申请出一个长度为 n 的空间,将其实地址赋值给 ptr
this->ptr = new datatype[n];
//给 len 进行初始化
this->len = 0;
this->size = n;
}
//判空
bool empty()
{
return this->len == 0;
}
//判满
bool full()
{
return this->len == this->size;
}
//尾插
void push_back(datatype e)
{
//判断是否满了
if (this->full())
{
return;
}
this->ptr[len++] = e;
}
//插入
void insert(int index, datatype e)
{
if (index < 0 || index > len) return;
if (full()) return;
for (int i = len; i > index; i--)
{
ptr[i] = ptr[i - 1];
}
ptr[index] = e;
len++;
}
//任意位置删除
void erase(int index)
{
if (index < 0 || index >= len) return;
for (int i = index; i < len - 1; i++)
{
ptr[i] = ptr[i + 1];
}
len--;
}
//尾删
void pop_back()
{
if (empty()) return;
len--;
}
//求长度
int length() {
return len;
}
//获取任意位置元素
datatype at(int index)
{
if (index < 0 || index >= len)
{
// 返回一个特定值表示错误
return -1;
}
return ptr[index];
}
//将顺序表进行排序
void sort(bool flag)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if ((flag && ptr[j] > ptr[j + 1]) || (!flag && ptr[j] < ptr[j + 1]))
{
datatype temp = ptr[j];
ptr[j] = ptr[j + 1];
ptr[j + 1] = temp;
}
}
}
}
//定义展示函数
void show()
{
//判空
cout << "当前顺序表中的元素分别是:";
for (int i = 0; i < this->len; i++)
{
cout << this->ptr[i] << " ";
}
cout << endl;
}
};
int main()
{
SeqList sl; //实例化一个顺序表对象
sl.init(5); //申请空间
sl.push_back(1);
sl.push_back(3);
sl.push_back(5);
sl.show();
sl.insert(1, 2);
sl.show();
sl.erase(2);
sl.show();
sl.pop_back();
sl.show();
cout << "顺序表长度为:" << sl.length() << endl;
int elementAtIndex = sl.at(1);
if (elementAtIndex!= -1)
{
cout<< elementAtIndex << endl;
}
else
{
cout << "错误" << endl;
}
sl.sort(true);
sl.show();
sl.sort(false);
sl.show();
return 0;
}