#include <stdio.h>
#include <stdlib.h> //调用malloc函数,返回值为void
#include <time.h>
struct node // 创建链表节点
{
int num; //成员1为数据
struct node * next; //成员2为和自己同类型的指针
};
typedef struct node Node; //将链表节点重命名为Node
typedef struct node * Link; //将链表节点指针重命名为Link
void Create_link(Link *head)
{
*head = NULL; //将空链表指向NULL,防止野指针
}
void Insert_node_tail(Link * head,Link new_node)
{
Link p; //定义一个结构体指针,用来移动链表,保护头指针
p = *head;
if (p == NULL) //如果链表是空链表。则将新节点作为头节点
{
new_node->next = NULL; //新节点的指针指向NULL
*head = new_node; //头指针指向新节点
}
else //否则找到链表的尾节点
{
while (p->next != NULL) //判断是否到尾节点
{
p = p->next; //节点向后移动
}
new_node->next = NULL; //移动到尾节点之后,让新节点指向NULL
p->next = new_node; //原来的尾节点指向新节点
}
}
void Display(Link head)
{
Link p;
p = head; //将头指针赋值给别人,保护头指针
if (head == NULL) //链表为空
{
printf("Link is empty!\n"); //输出链表为空
}
while (p != NULL) //当p指针不指向空
{
printf("num = %d\n",p->num);//将p指向的数据输出
p = p->next; //p指向下一个节点
}
}
void Release(Link * head)
{
Link p; //保护头节点
while (*head != NULL) //头节点不指向空
{
p = *head; //存一下头节点
*head = (*head)->next; //头节点后移
free(p); //释放p指向的节点
}
}
int Link_len(Link head)
{
int count = 0;
while (head != NULL)
{
count++;
head = head->next;
}
return count;
}
void Sort(Link * head)
{
int len;
len = Link_len(*head);
if (len <= 1)
{
return;
}
else if (len == 2)
{
Link p,q;
p = *head;
q = (*head)->next;
if (p->num > q->num)
{
*head = q;
q->next = p;
p->next = NULL;
}
}
else
{
Link p,q,x,y;
q = (*head)->next;
if ((*head)->num > q->num)
{
(*head)->next = q->next;
q->next = *head;
*head = q;
}
q = y = (*head)->next;
while (q->next != NULL)
{
q = q->next;
x = *head;
p = x->next;
while (p != q)
{
if (x == *head)
{
if (x->num > q->num)
{
y->next = q->next;
q->next = x;
*head = q;
q = y;
break;
}
}
if (p->num > q->num)
{
x->next = q;
y->next = q->next;
q->next = p;
q = y;
break;
}
x = p;
p = p->next;
}
y = q;
}
return;
}
}
int main()
{
srand((unsigned)time(NULL));
Link head;
Link new_node;
int i,n;
Create_link(&head); // 创建链表, 将地址传过去,带回地址
for (i = 0;i < 10; i++)
{
n = rand()%100;
new_node = (Link)malloc(sizeof(Node));
new_node->num = n;
}
Display(head);
Sort(&head);
Display(head);
Release(&head);
Display(head);
return 0;
}
---------------------
作者:不会水的鸟
来源:优快云
原文:https://blog.youkuaiyun.com/weixin_42425796/article/details/87305025
版权声明:本文为博主原创文章,转载请附上博文链接!
链表排序(插排无注释)
最新推荐文章于 2022-06-29 22:49:56 发布