#include<stdio.h>
typedef struct link
{
int data;
struct link* next;
}Node;
//根据a[] 建立一个单链表
void create_list(Node*& list, int a[], int len, int index)
{
if (index >= len)
return;
list = new Node;
list->data = a[index];
list->next = NULL;
create_list(list->next, a, len, index + 1);
}
//先序打印出链表的值
void Print(Node* p)
{
if (NULL == p)
return;
printf("%d ", p->data);
Print(p->next);
}
Node* getmin(Node* node) {//从node开始 链表中的最小值
Node* min;
min = node;
node = node->next;
while (node)
{
if (min->data > node->data)
min = node;
node = node->next;
}
return min;//返回较小值节点
}
//交换值的方法 没有交换指针
void selectsort(Node*& list)//单链表的简单选择排序
{
Node* p = list;//当前节点为list的第一个节点
//遍历每个节点 然后从当前节点向后找到最小的元素 与当前节点交换
while (p)
{
Node* min = getmin(p);//获得当前节点之后的值最小的节点
int temp = min->data;
min->data = p->data;
p->data = temp;
//遍历下一个结点
p = p->next;
}
}
int main()
{
int p[7] = { 5,3,8,4,1,2,0 };
Node* list;
create_list(list, p, 7, 0);
printf("原单链表:");
Print(list);
printf("\n");
selectsort(list);
printf("选择排序后的单链表:");
Print(list);
printf("\n");
return 0;
}
现在还不知道为什么要 list = new Node; 以后问问大佬。