C语言如何对链表的数进行排序
代码示例:
#include<stdio.h>
#include<malloc.h>
typedef
struct
node
{
int
data;/*data代表成绩分数*/
struct
node
*next;
}LNode,*LinkList;
LinkList
Creat(void)/*创建链表,结束标志为当输入的数据为0!*/
{
LinkList
H,p1,p2;
int
n;
n=0;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("输入数据:");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!=0)
{
n=n+1;
if(n==1)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
LinkList
Sort(LinkList
SL)/*递增排序函数:入口参数:链表的头指针,此为链表中的排序函数*/
{
LinkList
p,q;
int
temp;
for(p=SL;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
return
SL;
}
int
main()
{
LinkList
L,S,K;
L=Creat();
printf("初始化的单链表数据序列为:\n");
for(S=L;S!=NULL;S=S->next)
printf("%d
",S->data);
Sort(L);
printf("\n按递增顺序排序后的序列为:\n");
for(K=L;K!=NULL;K=K->next)
printf("%d==>",K->data);
return
0;
}
可以从以下三个步骤入手:排序算法选择、链表遍历和值交换1.使用排序算法对链表的数进行排序是可行的。
2.因为链表的结构可以通过指针进行值交换,并且链表的值是动态增加和减少的。
常用的排序算法有快排、冒泡排序、插入排序等等,需要根据实际情况进行选择。
3.在实现排序的时候,需要遍历链表,然后通过值的比较来判断是否需要进行值交换。
在链表操作中,最好将头和尾都保存下来,循环链表可以使用双向链表,提高操作效率。
C语言中链表与队列有很么区别
C语言的链表与队列是两种不同的概念:链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;队列是一种数据结构,其特点是先进先出,后进后出;队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。
还没有评论,来说两句吧...