#include<stdio.h>
#include<stdlib.h>
//单链表的存储结构定义
typedef struct Node
{
int data;
struct Node *next;
}LNode,*LinkList;
//创建单链表
LinkList CreatList()
{
LinkList L;
LNode *r,*s;
int x;
L=(LNode *)malloc(sizeof(LNode));//创建一个头结点
L->next = NULL;
r=L;
printf("请输入单链表(输入-1结束): ");
scanf("%d",&x);
while(x!=-1)
{
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=r->next;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
//打印单链表
void print(LNode *L)
{
LNode *r;
r=L;
while(r->next!=NULL)
{
r=r->next;
printf("%d ",r->data);
}
printf("\n");
}
//无序单链表从小到大的排序
LinkList fun(LNode *L)
{
LNode *p, *q;
int t;
p = L->next;//p指向首元结点
while(p!=NULL)//第一重循环将p的位置固定下来,进入第二重循环与后面的遍历指针p所指向的结点之间相互比较大小
{
q = p->next;//将q指向p的下一个结点,进行数据之间的大小比较
while (q != NULL)//第二重循环就是不断将指针q后移,与p所指向的结点数据进行大小比较,数据互换
{
if (p->data > q->data)
{
t = p->data;//将数据寄存在t中,进行互换
p->data = q->data;
q->data = t;
}
q = q->next;//遍历
}
p = p->next;
}
return L;
}
int main()
{
LinkList L = CreatList();
printf("未排序的单链表:");
print(L);
fun(L);
printf("从小到大的排序:");
print(L);
return 0;
}
单链表的从小到大排序
最新推荐文章于 2022-11-06 18:04:49 发布