定义一个link list类型的指针p
时间: 2023-05-22 14:00:55 浏览: 105
好的,定义一个link list类型的指针p可以使用以下代码:
struct Node {
int data;
Node* next;
};
Node* p = nullptr;
这样就定义了一个名为p的指向link list的指针。
相关问题
4) 以下是一个List类模板的定义: 模板<类T>类列表{ 公共: List();//构造函数 void Add(T&);//在Link表头添加新结点 void Remove(T&);//在Link中删除含有特定值的元素 T*Find(T&);//查找含有特定值的结点 void PrintList();//打印输出整个链表 ~列表(); 受保护的: 结构节点{ 节点* pNext; T * pT; }; 节点* pFirst; //链首结点指针 }; 完成对上述List类模板含有的各成员函数的定义。然后定义一个简单的Student类,并 利用编写的List类模板对一个班级的学生进行动态管理。(根据自己的能力选做)。
以下是List类模板的各成员函数的定义:
```c++
template<class T>
class List {
public:
List() : pFirst(nullptr) {} //构造函数
void Add(T& t) { //在Link表头添加新结点
Node* pNode = new Node;
pNode->pT = &t;
pNode->pNext = pFirst;
pFirst = pNode;
}
void Remove(T& t) { //在Link中删除含有特定值的元素
Node* pNode = pFirst;
Node* pPrev = nullptr;
while (pNode) {
if (*(pNode->pT) == t) {
if (pPrev) {
pPrev->pNext = pNode->pNext;
} else {
pFirst = pNode->pNext;
}
delete pNode;
return;
}
pPrev = pNode;
pNode = pNode->pNext;
}
}
T* Find(T& t) { //查找含有特定值的结点
Node* pNode = pFirst;
while (pNode) {
if (*(pNode->pT) == t) {
return pNode->pT;
}
pNode = pNode->pNext;
}
return nullptr;
}
void PrintList() { //打印输出整个链表
Node* pNode = pFirst;
while (pNode) {
std::cout << *(pNode->pT) << std::endl;
pNode = pNode->pNext;
}
}
~List() { //析构函数
Node* pNode = pFirst;
while (pNode) {
Node* pNext = pNode->pNext;
delete pNode;
pNode = pNext;
}
}
protected:
struct Node { //节点结构体
Node* pNext;
T* pT;
};
Node* pFirst; //链首结点指针
};
```
接下来,我们可以定义一个简单的Student类,并利用编写的List类模板对一个班级的学生进行动态管理,如下:
```c++
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
Student(string name = "", int age = 0, int score = 0)
: name(name), age(age), score(score) {}
bool operator==(const Student& s) const {
return name == s.name && age == s.age && score == s.score;
}
friend ostream& operator<<(ostream& os, const Student& s) {
os << "name: " << s.name << ", age: " << s.age << ", score: " << s.score;
return os;
}
private:
string name;
int age;
int score;
};
int main() {
List<Student> stuList;
stuList.Add(Student("Alice", 18, 90));
stuList.Add(Student("Bob", 19, 85));
stuList.Add(Student("Charlie", 20, 95));
cout << "students in class:" << endl;
stuList.PrintList();
Student s("Bob", 19, 85);
cout << "find student: " << s << endl;
Student* p = stuList.Find(s);
if (p) {
cout << "found: " << *p << endl;
} else {
cout << "not found" << endl;
}
stuList.Remove(s);
cout << "after remove " << s << ":" << endl;
stuList.PrintList();
return 0;
}
```
以下是一个List类模板的定义: 模板<类T>类列表{ 公共: List();//构造函数 void Add(T&);//在Link表头添加新结点 void Remove(T&);//在Link中删除含有特定值的元素 T*Find(T&);//查找含有特定值的结点 void PrintList();//打印输出整个链表 ~列表(); 受保护的: 结构节点{ 节点* pNext; T * pT; }; 节点* pFirst; //链首结点指针 }; 完成对上述List类模板含有的各成员函数的定义。然后定义一个简单的Student类,并 利用编写的List类模板对一个班级的学生进行动态管理。(根据自己的能力选做)。
下面是List类模板各成员函数的定义:
```cpp
template<class T>
class List{
public:
List():pFirst(nullptr){} //构造函数
void Add(T& val){
Node* pNode = new Node;
pNode->pT = &val;
pNode->pNext = pFirst;
pFirst = pNode;
} //在Link表头添加新结点
void Remove(T& val){
Node* pNode = pFirst;
Node* pPrev = nullptr;
while(pNode){
if(*(pNode->pT) == val){
if(pPrev){
pPrev->pNext = pNode->pNext;
}else{
pFirst = pNode->pNext;
}
delete pNode;
return;
}
pPrev = pNode;
pNode = pNode->pNext;
}
} //在Link中删除含有特定值的元素
T* Find(T& val){
Node* pNode = pFirst;
while(pNode){
if(*(pNode->pT) == val){
return pNode->pT;
}
pNode = pNode->pNext;
}
return nullptr;
} //查找含有特定值的结点
void PrintList(){
Node* pNode = pFirst;
while(pNode){
std::cout << *(pNode->pT) << std::endl;
pNode = pNode->pNext;
}
} //打印输出整个链表
~List(){
Node* pNode = pFirst;
while(pNode){
Node* pNext = pNode->pNext;
delete pNode;
pNode = pNext;
}
}
protected:
struct Node{
Node* pNext;
T* pT;
};
Node* pFirst; //链首结点指针
};
```
下面是简单的Student类定义:
```cpp
class Student{
public:
Student(const std::string& name, int id):name_(name), id_(id){}
bool operator==(const Student& other) const{
return id_ == other.id_;
}
friend std::ostream& operator<<(std::ostream& os, const Student& student);
private:
std::string name_;
int id_;
};
std::ostream& operator<<(std::ostream& os, const Student& student){
os << "Name: " << student.name_ << ", ID: " << student.id_;
return os;
}
```
下面是利用List类模板对一个班级的学生进行动态管理的示例代码:
```cpp
int main(){
List<Student> classList;
Student s1("Alice", 1001);
Student s2("Bob", 1002);
Student s3("Charlie", 1003);
//添加学生
classList.Add(s1);
classList.Add(s2);
classList.Add(s3);
//打印学生
classList.PrintList();
std::cout << std::endl;
//查找学生
Student s4("Bob", 1002);
Student* pStudent = classList.Find(s4);
if(pStudent){
std::cout << "Found student: " << *pStudent << std::endl;
}else{
std::cout << "Student not found." << std::endl;
}
std::cout << std::endl;
//删除学生
classList.Remove(s2);
classList.PrintList();
return 0;
}
```