C语言链表【排序】

链表的排序在一些算法题中有着许多帮助(学生成绩管理系统根据成绩排名):

先来看看冒泡排序怎么做吧

冒泡排序

#include<stdio.h>
#include<stdlib.h>

typedef struct book{
	 int data;
	 book *next;
};

book* creat(book *head)//创建链表 
{
	    book *p=head,*pr=NULL;
	    pr=(book *)malloc(sizeof(book));
	    
	    printf("asd:");
	    scanf("%d",&pr->data);
	    if(head==NULL)
	    {
	    	  head=pr;
		}
		else
		{
			  while(p->next!=NULL)
			  {
			  	     p=p->next;  
			  }
			  p->next=pr;
		}
		 pr->next=NULL;
				  
		return head;
}

void print(book *head)//打印链表 
{
	   book *p=head;
	   while(p!=NULL)
	   { 
	        printf("%d ",p->data);
	        p=p->next;
	   }
}

void dele(book *head)//释放链表申请的空间 
{
	    book* p=head,*pr=NULL;
		while(p!=NULL)
		{ 
		     pr=p;
		     p=p->next;
		     free(pr);
		 } 
 } 

void sort(book *head)//对链表进行冒泡排序 
{
	 book *p=NULL,*pr=NULL;//双重循环所需要的两个结构体指针 
	 int t;
	 
	 for(p=head;p->next!=NULL;p=p->next)//第一个循环 
	 {
	 	  for(pr=p->next;pr!=NULL;pr=pr->next)//第二个循环 
	 	  {
	 	  	   if(p->data>pr->data)//比较 
	 	  	   {
	                  t=p->data;
					  p->data=pr->data;
					  pr->data=t; 	  	   	   
				  }
		   }
	 }
}

int main(void)
{
	 int n;
	 book *head=NULL;
	
	 scanf("%d",&n);
	 
	 while(n)
	 {
	 	head=creat(head);
	 	n--;
	 }
	 sort(head);
	 print(head);
	 dele(head);
	 
	 return 0;
 } 

模块

void sort(book *head)//对链表进行冒泡排序 
{
	 book *p=NULL,*pr=NULL;//双重循环所需要的两个结构体指针 
	 int t;
	 
	 for(p=head;p->next!=NULL;p=p->next)//第一个循环 
	 {
	 	  for(pr=p->next;pr!=NULL;pr=pr->next)//第二个循环 
	 	  {
	 	  	   if(p->data>pr->data)//比较 
	 	  	   {
	                  t=p->data;
					  p->data=pr->data;
					  pr->data=t; 	  	   	   
				  }
		   }
	 }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值