题目:设计一个以链表为基础的学生信息管理,系统中包含五个函数的实现,具体功能如下:
Linked* Create():创建并返回一个空链表;
void InsertAfter(Linked *node,int num,float sc):在 node 所指节点之后插入一个新节点,并用参数 num ,sc 的值分别初始化新节点的成员变量学号和分数;
void DeleteAfter(Linked *node):删除 node 节点之后的节点;
Linked* GetByIndex(Linked *head,int index):返回 head 所指链表中索引为 index 的节点,比如当 index 为 0 时,返回的应该是头结点之后的第一个节点;
void PrintAll(Linked *head):按照<学号> <分数>的格式打印链表中所有节点的成员变量的值,每个一行。
代码:
#include <iostream>
using namespace std;
struct Linked {
//结构体的成员变量
int number;
float score;
Linked *next;
};
Linked* Create() {
//创建并返回一个新链表
Linked*a = new Linked;
a->number = 0;
a->score = 0;
a->next = NULL;
return a;
}
void InsertAfter(Linked* node, int num, float sc){
//在指定节点后插入一个新节点,内容由 nu//m,sc 参数指定
Linked*newnode = new Linked;
if (node->number == 0 && node->score == 0)
{
node->number = num;
node->score = sc;
// delete newnode;
}
else
{
newnode->number = num;
newnode->score = sc;
newnode->next = node->next;
node->next = newnode;
}
}
void DeleteAfter(Linked* node) {
//删除此节点之后的一个节点
if (node->next == NULL)
return;
else {
node->next = node->next->next; }
}
Linked* GetByIndex(Linked* head, int index) {
//返回指定索引处的节点
Linked* p = head;
int i = 0;
while (i < index) {
p = p->next;
i++;
}
return p;
}
void PrintAll(Linked* head) {
//按格式打印此链表中所有节点的成员变量
while (head) {
cout << head->number << " " << head->score << endl;
head = head->next;
}
}
int main()
{
int num;
float score;
cin >> num >> score ;
Linked *lk = Create();
InsertAfter(lk,num,score);
cin >> num >> score ;
InsertAfter(GetByIndex(lk,0),num,score);
cin >> num >> score ;
InsertAfter(GetByIndex(lk,1),num,score);
DeleteAfter(GetByIndex(lk,0));
PrintAll(lk);
}