C++数据结构
我的个人博客 Sheep
https://sheep317.xyz
Email:[email protected]*
第一次作业
代码
#include "iostream" // 引入输入输出流库,提供输入输出功能
// 定义类 aa
class aa {
private:
int a[10]; // 用于存储元素的数组,大小为 10
int len; // 当前数组中元素的数量
public:
// 构造函数,初始化数组长度为 0
aa() {
len = 0;
}
// 搜索元素,返回该元素在数组中的索引,找不到返回 -1
int f(int x) {
for (int i = 0; i < len; i++) {
if (a[i] == x) return i; // 找到元素返回其索引
}
return -1; // 未找到返回 -1
}
// 插入元素到数组末尾
void insert(int x) {
a[len] = x; // 将元素添加到数组的下一个空位
len++; // 增加数组长度
}
// 删除数组中的指定元素
void del(int x) {
int k = f(x); // 查找要删除元素的索引
// 将删除元素后面的元素前移一位
for (int i = k + 1; i < len; i++) {
a[i - 1] = a[i];
}
len--; // 减少数组长度
}
// 输出数组中的所有元素
void output() {
for (int i = 0; i < len; i++) {
std::cout << a[i] << " "; // 输出每个元素
}
std::cout << std::endl; // 换行
}
// 在数组的第一个位置插入元素,其他元素后移
void add_in_zero(int x) {
// 将所有元素向后移动一位
for (int i = len - 1; i >= 0; i--) {
a[i + 1] = a[i];
}
a[0] = x; // 将新元素放在第一个位置
len++; // 增加数组长度
}
// 在指定位置插入元素,其他元素后移
void add_in_k(int x, int k) {
// 将指定位置之后的元素后移
for (int i = len - 1; i >= k - 1; i--) {
a[i + 1] = a[i];
}
a[k - 1] = x; // 在指定位置插入元素
len++; // 增加数组长度
}
};
int main() {
int b[] = {11, 12, 13, 41, 51}; // 初始化一个整数数组
aa w; // 创建 aa 类的对象
// 将数组 b 中的元素插入到 w 中
for (int i = 0; i < 5; i++) {
w.insert(b[i]);
}
w.output(); // 输出当前数组中的元素
w.del(12); // 删除元素 12
w.output(); // 输出删除后的数组
w.add_in_zero(1); // 在数组的第一个位置插入元素 1
w.output(); // 输出插入后的数组
int x;
std::cout << "请输入你想插入的位置:";
std::cin >> x; // 输入要插入的数组位置
w.add_in_k(2, x); // 在指定位置插入元素 2
w.output(); // 输出插入后的数组
system("pause"); // 暂停程序(仅在 Windows 环境中有效)
}
运行结果
第二次作业
代码
#include "iostream" // 引入输入输出流库,提供输入输出功能
// 模板类定义,T 为类型参数,n 为整型模板参数
template <class T ,int n>
class list {
private:
T *a; // 指向存储元素的数组的指针
int len; // 当前数组中元素的数量
public:
// 构造函数,初始化数组并将元素数量设为 0
list() {
a = new T[n]; // 动态分配大小为 n 的数组
len = 0; // 初始长度为 0
}
// 添加元素到数组末尾
void add(T x) {
a[len] = x; // 将元素添加到数组的下一个空位
len++; // 增加数组中的元素数量
}
// 在指定位置插入元素
void insert(T x) {
int k; // 用于存储插入位置
std::cout << "请输入要插入的位置:";
std::cin >> k; // 输入插入位置
// 将插入位置之后的元素向后移动一位
for (int i = len - 1; i >= k - 1; i--) {
a[i + 1] = a[i];
}
a[k - 1] = x; // 在指定位置插入元素
len++; // 增加元素数量
}
// 搜索元素,返回元素在数组中的位置,未找到则返回 -1
int serach(T x) {
for (int i = 0; i < len; i++) {
if (a[i] == x) return i; // 找到元素则返回位置
}
return -1; // 未找到返回 -1
}
// 删除指定的元素
void del(T x) {
for (int i = serach(x); i < len; i++) {
a[i] = a[i + 1]; // 删除元素并将后续元素向前移动
}
len--; // 减少数组中的元素数量
}
// 输出数组中的所有元素
void output() {
for (int i = 0; i < len; i++) {
std::cout << a[i] << " "; // 输出每个元素
}
std::cout << std::endl; // 换行
}
};
int main() {
list<int,10> a; // 创建类型为 int,大小为 10 的 list 对象
int b[5] = {1, 3, 5, 4, 6}; // 初始化一个整数数组
// 将数组 b 中的元素添加到 list 对象中
for (int i = 0; i < sizeof(b) / sizeof(b[0]); i++) {
a.add(b[i]);
}
a.output(); // 输出当前 list 中的元素
int x;
std::cout << "请输入想要插入的数字:";
std::cin >> x; // 输入想要插入的元素
a.insert(x); // 将输入的数字插入 list
a.output(); // 输出插入后的 list
std::cout << "x的" << "位置为:" << a.serach(x) << std::endl; // 搜索 x 的位置并输出
a.del(x); // 删除 x
a.output(); // 输出删除后的 list
system("pause"); // 暂停程序(仅在 Windows 环境中有效)
}