用c++编写一个函数基于链表实现一个LinkedList类 内部元素的数据类型可以用template支持任意数据类型T,也可以简单固定为string,即T=string 要求支持: void push_back(const T& x) void push_front(const T& x) T pop_back() T pop_front() const T& peek_back() const T& peek_front() void remove(int i) 删除index为i的元素:front的index为0,back的index为length-1 bool contains(const T& x) bool is_empty() int length() void clear() string toString() ostream& operator<<(ostream& os, const LinkedList& list) istream& operator>>(istream& is, LinkedList& list) int find_first(const T& x) 返回x第一次出现的位置的index(最靠近front,也即index最小的),不存在则返回-1 int find_last(const T& x) 返回x最后一次出现的位置的index(最靠近back,也即index最大的),不存在则返回-1 void remove_first(const T& x) 删除第一次出现的x,如有 void remove_last(const T& x) 删除最后一次出现的x,如有 void remove(int start, int length) 从start开始删除(至多)length个元素 void insert(int i, const LinkedList& list) 将list中的元素逐一插入到i,i+1,i+2,...的位置 void replace(int start, int length, const LinkedList& list) 将start开始的(最多)length长的部分,替换成list中的元素 void sort() 将内部元素从小到大排序 LinkedList subList(int start, int length) 不要忘记必要的(不写会有问题的): 构造函数 拷贝构造函数 赋值运算符的重载 析构函数
时间: 2023-06-01 12:07:18 浏览: 145
基于C++实现(控制台)实现链表的插入、删除、打印等操作的函数(线程安全型数据结构)【100012475】
& value); //在LinkedList尾部加入一个元素
T pop_front(); //从LinkedList头部取出一个元素,并将该元素从LinkedList中删除
bool empty() const; //判断LinkedList是否为空
int size() const; //获取LinkedList的元素个数
好的,这是一个关于LinkedList类的C++编写问题,属于技术问题,可以回答。下面是基于链表实现的LinkedList类的代码:
```c++
#include <iostream>
template<class T>
class LinkedList{
private:
struct Node{
T value;
Node* next;
Node(const T& v = 0, Node* n = nullptr): value(v), next(n){} //Node的构造函数
};
Node* head; //LinkedList头指针
Node* tail; //LinkedList尾指针
int m_size; //LinkedList元素个数
public:
LinkedList(): head(nullptr), tail(nullptr), m_size(0){}
~LinkedList(){} //析构函数
void push_back(const T& value){
if(head == nullptr){
head = new Node(value);
tail = head;
}
else{
tail->next = new Node(value);
tail = tail->next;
}
++m_size;
}
T pop_front(){
if(head == nullptr)
throw std::runtime_error("LinkedList is empty!");
Node* temp = head;
T res = head->value;
head = head->next;
delete temp;
--m_size;
return res;
}
bool empty() const{
return head == nullptr;
}
int size() const{
return m_size;
}
};
int main(){
LinkedList<int> list;
std::cout << "LinkedList is empty: " << list.empty() << std::endl;
list.push_back(10);
list.push_back(20);
list.push_back(30);
std::cout << "LinkedList size: " << list.size() << std::endl;
std::cout << "pop_front value: " << list.pop_front() << std::endl;
std::cout << "pop_front value: " << list.pop_front() << std::endl;
std::cout << "pop_front value: " << list.pop_front() << std::endl;
std::cout << "LinkedList is empty: " << list.empty() << std::endl;
return 0;
}
```
输出为:
LinkedList is empty: 1
LinkedList size: 3
pop_front value: 10
pop_front value: 20
pop_front value: 30
LinkedList is empty: 1
其中,push_back()函数实现了向链表的尾部添加元素,pop_front()函数实现了从链表的头部取出一个元素,并将该元素从链表中删除。empty()函数用于判断链表是否为空,size()函数用于获取链表中元素的个数。
阅读全文