设计一个简单的单向链表类模版List,并进行测试。
时间: 2024-03-07 20:47:51 浏览: 59
好的,下面是一个简单的单向链表类模板List的设计:
```cpp
#include <iostream>
template <typename T>
class List {
private:
struct Node {
T data;
Node* next;
Node(const T& d, Node* n = nullptr)
: data(d), next(n) {}
};
Node* head;
int size;
public:
List() : head(nullptr), size(0) {}
~List() {
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
void push_front(const T& d) {
head = new Node(d, head);
size++;
}
T& front() {
return head->data;
}
const T& front() const {
return head->data;
}
void pop_front() {
Node* temp = head;
head = head->next;
delete temp;
size--;
}
int get_size() const {
return size;
}
};
int main() {
List<int> list;
std::cout << "Size of list: " << list.get_size() << std::endl;
list.push_front(1);
list.push_front(2);
list.push_front(3);
std::cout << "Size of list: " << list.get_size() << std::endl;
std::cout << "Front of list: " << list.front() << std::endl;
list.pop_front();
std::cout << "Size of list: " << list.get_size() << std::endl;
std::cout << "Front of list: " << list.front() << std::endl;
return 0;
}
```
在上面的代码中,我们定义了一个List类模板,它包含一个私有的Node结构体,它有一个数据成员和一个指向下一个Node的指针。List类模板有一个头指针,它指向第一个Node。List类模板还有一个size成员变量,表示链表的大小。
List类模板包含以下公共成员函数:
- 构造函数和析构函数
- push_front函数,用于在链表的前面添加一个元素
- front函数,用于获取链表的第一个元素
- pop_front函数,用于删除链表的第一个元素
- get_size函数,用于获取链表的大小
在main函数中,我们创建一个int类型的List对象,并测试了它的各种方法。
注意:这只是一个简单的实现,实际上单向链表还有很多其他的操作,比如在尾部添加元素、在任意位置插入元素、删除任意元素等,这些操作都可以根据需要在List类模板中添加。
阅读全文