翻译下列代码Book* Sort(Book* head)//排序 { Book* begin = NULL, * end = NULL;//链表的首尾结点 Book* p; Book* min, * premin = nullptr; //最小结点及其前一个结点 if (!head)return NULL; while (head)//循环找出链表中的最小结点 { p = head; min = p; while ((*p).next != NULL) { if (strcmp((*min).name,(*(*p).next).name) > 0) { *premin = *p; min = (*p).next; } p = p->next; }//将min放进有序链表 if (begin == NULL) { begin = end = min; } else { (*end).next = min; end = min; } //在无序表列中删除min if (min = head) { head = (*min).next; } else { (*premin).next = (*min).next; } } (*end).next = NULL; return begin; }
时间: 2024-02-19 16:04:04 浏览: 137
栈链表_c语言/栈链表_
这段代码是一个使用选择排序算法对链表进行排序的函数。下面是代码的翻译和注释:
```
//定义一个函数,输入参数为一个链表的头指针,返回值为排序后的链表的头指针
Book* Sort(Book* head)//排序
{
//定义链表的首尾结点,以及遍历链表时用到的指针变量
Book* begin = NULL, * end = NULL;//链表的首尾结点
Book* p;
Book* min, * premin = nullptr; //最小结点及其前一个结点
//如果链表为空,直接返回NULL
if (!head)return NULL;
//循环找出链表中的最小结点
while (head)
{
//遍历链表,找到最小的结点
p = head;
min = p;
while ((*p).next != NULL)
{
//如果当前结点的名字比min结点的名字更小,就将当前结点作为min结点
if (strcmp((*min).name,(*(*p).next).name) > 0)
{
premin = p;
min = (*p).next;
}
p = p->next;
}
//将min结点放进有序链表
if (begin == NULL)
{
begin = end = min;
}
else
{
(*end).next = min;
end = min;
}
//在无序链表中删除min结点
if (min = head)
{
head = (*min).next;
}
else
{
(*premin).next = (*min).next;
}
}
//在有序链表的末尾添加空指针
(*end).next = NULL;
//返回排序后的链表的头指针
return begin;
}
```
阅读全文