#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list*next;
}LIST,*PLIST;
PLIST init()
{
PLIST temp;
temp = (PLIST)malloc(sizeof(LIST));
temp->next = NULL;
return temp;
}
void insert(PLIST head, int NewDate)
{
//头插法
PLIST p= (PLIST)malloc(sizeof(LIST));//准备新结点
p->data = NewDate; //数据放进去
#if 0
temp->next = head->next;//将head后面的连接到temp->next上面。同时head断了与后面的连接
head->next = temp;//将temp连接到head->next上连接起来
#else
//尾插法
PLIST temp = head;//head赋值给temp
while (temp->next != NULL)//遍历head找到尾部
{
temp = temp->next;
}
//找到了 就退出开始插入。
temp->next = p;//刚刚申请的结点
p->next = NULL;
#endif
}
void ScanData(PLIST head)
{
printf("请输入数字\n");
for (int i = 0; i < 5; i++)
{
int n = 0;
printf(">");
scanf("%d", &n);
insert(head, n);
}
}
void print(PLIST head)
{
PLIST p = head->next;
while (p!= NULL)
{
printf("%d\t", p->data);
p = p->next;
}
}
void Sort(PLIST *head)//功能函数
{
PLIST p, q;//定义指针
q = (*head)->next;//工作指针
p = (*head)->next;//基准
while (q->next != NULL)
{
if (p->next->data < p->data)//找到比基准小的数字
{
q = p->next;//将小于基准的位置找出来
p->next = p->next->next;//将该数字前后连起来
q->next = p;
(*head)->next = q;//查到基准的前面
}
else
{
p->next = p->next->next;
}
q = q->next;
}
}
int main()
{
PLIST head;
head = init();
ScanData(head);
//print(head);
Sort(&head);
print(head);
getchar();
return 0;
}
链表实现快速排列——C语言实现
最新推荐文章于 2024-07-10 22:01:47 发布