c++1、定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。要求在main函数中由链表模板类创建整型类模板并测试各个成员函数。 2、某个单位现有的所有员工根据领取薪金的方式分为如下几类:时
时间: 2024-10-21 19:05:32 浏览: 24
单向链表的类模板实现增加、删除、查找和打印
3星 · 编辑精心推荐
1. 定义一个单向链表模板类(template)用于整数(int),首先需要包括头文件`#include <iostream>`,以及定义节点结构体(Node):
```cpp
template <typename T>
class SingleLinkedList {
public:
struct Node {
T data;
Node* next;
};
// 构造函数
SingleLinkedList() : head(nullptr) {}
// 添加元素到链表尾部
void addElement(T value) {
Node* newNode = new Node{value, nullptr};
if (head == nullptr) {
head = newNode;
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
// 删除指定值的节点
void removeElement(T value) {
if (head == nullptr) return;
if (head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
while (current->next != nullptr && current->next->data != value) {
current = current->next;
}
if (current->next != nullptr) {
Node* temp = current->next;
current->next = current->next->next;
delete temp;
}
}
// 查找特定值
bool findElement(T value) const {
Node* current = head;
while (current != nullptr) {
if (current->data == value) return true;
current = current->next;
}
return false;
}
// 打印链表
void printList() const {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
private:
Node* head;
};
// 测试示例
int main() {
SingleLinkedList<int> list;
list.addElement(5);
list.addElement(10);
list.addElement(15);
list.printList(); // 输出: 5 10 15
list.removeElement(10);
list.printList(); // 输出: 5 15
std::cout << (list.findElement(10) ? "Found" : "Not Found") << std::endl; // 输出: Not Found
return 0;
}
```
2. 对于按领取薪金方式分类的员工,可以创建一个Employee类,并添加一个枚举类型作为薪资类型(SalaryType)。例如:
```cpp
enum class SalaryType { Hourly, Monthly, Annual };
class Employee {
public:
Employee(const std::string& name, SalaryType salaryType)
: name(name), salaryType(salaryType) {}
std::string getName() const { return name; }
SalaryType getSalaryType() const { return salaryType; }
private:
std::string name;
SalaryType salaryType;
};
// 管理员工的链表
class EmployeeList {
public:
// ...类似上文的链表操作...
};
```
在这个例子中,你可以按照员工的薪资类型对员工进行分类,然后分别管理每个类型的列表。
阅读全文