建立一个10结点的单向链表,每个结点包括编号、姓名、年龄、性别。采用插入排序法对其进行排序,按学号从小到大排序。

【输入形式】10行数据,每行数据4个元素,用空格隔开,分别为姓名,编号,性别,年龄。
【输出形式】22行数据,前11行为排序前结果,后11行为排序后结果。每11行中第一行为输出提示语句,后面10行每行包含四个数据,分别为编号,年龄,姓名,性别。具体输出形式见样例输出

【样例输入】

AAA 8002101 male 15
BBB 8002105 male 16
CCC 8002106 male 17
DDD 8002107 male 18
EEE 8002108 male 19
FFF 8002109 male 20
GGG 8002100 male 21
HHH 8002103 male 22
III 8002102 male 23
JJJ 8002104 male 24

【样例输出】

Before ordering(id|age|name|sex)
(8002101|15|AAA|male)
(8002105|16|BBB|male)
(8002106|17|CCC|male)
(8002107|18|DDD|male)
(8002108|19|EEE|male)
(8002109|20|FFF|male)
(8002100|21|GGG|male)
(8002103|22|HHH|male)
(8002102|23|III|male)
(8002104|24|JJJ|male)
After ordering(id|age|name|sex)
(8002100|21|GGG|male)
(8002101|15|AAA|male)
(8002102|23|III|male)
(8002103|22|HHH|male)
(8002104|24|JJJ|male)
(8002105|16|BBB|male)
(8002106|17|CCC|male)
(8002107|18|DDD|male)
(8002108|19|EEE|male)
(8002109|20|FFF|male)
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供代码示例: ```cpp #include <iostream> #include <string> using namespace std; // 定义链表点 struct Node { int id; string name; char gender; int age; Node* next; }; // 插入排序 void insertionSort(Node*& head) { if (head == nullptr || head->next == nullptr) return; // 链表为空或只有一个点,不需要排序 Node* sorted = head; // 已排序部分的末尾点 Node* cur = head->next; // 当前待排序点 sorted->next = nullptr; // 已排序部分的末尾点的next指针置为nullptr while (cur != nullptr) { Node* next = cur->next; // 保存下一个待排序点,防止链表断裂 if (cur->id < sorted->id) { // 待排序点的学号小于已排序部分的末尾点的学号 cur->next = sorted; // 将待排序插入排序部分的开头 sorted = cur; } else { // 待排序点的学号大于等于已排序部分的末尾点的学号 Node* p = sorted; while (p->next != nullptr && cur->id >= p->next->id) { // 找到待排序点应插入的位置 p = p->next; } cur->next = p->next; // 将待排序插入到p点之后 p->next = cur; } cur = next; // 处理下一个待排序点 } head = sorted; // 更新链表头 } // 输出链表 void printList(Node* head) { while (head != nullptr) { cout << head->id << " " << head->name << " " << head->gender << " " << head->age << endl; head = head->next; } } int main() { // 建立链表 Node* head = new Node{101, "Tom", 'M', 20, nullptr}; Node* p1 = new Node{105, "Lucy", 'F', 19, nullptr}; Node* p2 = new Node{103, "Jack", 'M', 21, nullptr}; Node* p3 = new Node{109, "Lily", 'F', 18, nullptr}; Node* p4 = new Node{107, "Bob", 'M', 22, nullptr}; Node* p5 = new Node{102, "Mary", 'F', 20, nullptr}; Node* p6 = new Node{106, "John", 'M', 19, nullptr}; Node* p7 = new Node{104, "Kate", 'F', 21, nullptr}; Node* p8 = new Node{110, "Mike", 'M', 18, nullptr}; Node* p9 = new Node{108, "Ann", 'F', 22, nullptr}; head->next = p1; p1->next = p2; p2->next = p3; p3->next = p4; p4->next = p5; p5->next = p6; p6->next = p7; p7->next = p8; p8->next = p9; // 对链表进行排序 insertionSort(head); // 输出排序后的链表 printList(head); // 释放链表内存 Node* p = head; while (p != nullptr) { Node* q = p->next; delete p; p = q; } return 0; } ``` 以上代码使用插入排序单向链表进行排序,按学号从小到大排列。您可以根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值