设计一个链表类模板,链表中每一个数据元素表示学生的基本信息,包括学号(int)、姓名(不超过10个字符)。采用链表存储结构,并按照学号从小到大排序,对链表进行如下操作:1.不断读入新的学生信息(姓名,学号)2.将新的学生信息节点插入到链表中的合适位置,使得链表节点按照学号由小到大升序排列。3.按链表顺序输出所有学生姓名。
时间: 2023-06-18 11:02:17 浏览: 104
下面是链表类模板的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Node {
public:
T data;
Node *next;
Node(T data) {
this->data = data;
next = nullptr;
}
};
template <typename T>
class LinkedList {
private:
Node<T> *head;
public:
LinkedList() {
head = nullptr;
}
void insert(T data) {
Node<T> *newNode = new Node<T>(data);
if (head == nullptr) {
head = newNode;
return;
}
if (data.first < head->data.first) {
newNode->next = head;
head = newNode;
return;
}
Node<T> *current = head;
while (current->next != nullptr && current->next->data.first < data.first) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
void print() {
Node<T> *current = head;
while (current != nullptr) {
cout << current->data.second << endl;
current = current->next;
}
}
};
int main() {
LinkedList<pair<int, string>> list;
while (true) {
string name;
int id;
cout << "Enter name and ID: ";
cin >> name >> id;
if (id == -1) {
break;
}
list.insert(make_pair(id, name));
}
list.print();
return 0;
}
```
上述代码中,类模板 LinkedList 中的 insert 方法用于将新的学生信息节点插入到链表中的合适位置,使得链表节点按照学号由小到大升序排列。方法中,首先判断链表是否为空,如果为空,则直接将新节点插入头部;否则,遍历链表,找到合适的位置插入新节点。
print 方法用于按链表顺序输出所有学生姓名,遍历链表即可。
阅读全文