C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)

本文介绍了如何使用C语言实现单向链表,并提供了冒泡排序、选择排序、插入排序以及快速排序四种排序算法的详细代码。这些排序算法适用于链表数据结构,可用于对结构体数组按指定字段进行排序。文章旨在分享经验,欢迎读者批评指正。
摘要由CSDN通过智能技术生成


#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct Student)
struct Student                //结构体声明
{
 long num;
 int score;
 struct Student* next;
};
int n;

struct Student* creat()           //创建单向链表
{
 struct Student *head=NULL, *p_before, *p_later;
 p_before = p_later = (struct Student*) malloc(LEN);
 scanf_s("%ld%d", &p_before->num, &p_before->score);
 while (p_before->num!=0)
 {
  n++;
  if (n == 1) head = p_before;
  else p_later->next = p_before;
  p_later = p_before;
  p_before = (struct Student*) malloc(LEN);
  scanf_s("%ld%d", &p_before->num, &p_before->score);
 }
 p_later->next = NULL;
 free(p_before);
 return head;
}

struct Student* sort(struct Student* list)               //冒泡排序,当初写的是内容交换而不是指针交换,我知道这不是好的做法,但日子一久,当下没时间和热情改了,大家原谅,
{                                                                            //等有时间了一定改
 struct Student *p, *q;
 int temp1,i;
 long temp2;
 for (p = list, i =1; i < n;i++,p=p->next)
  for (q = p->next;q!= NULL;q=q->next)  
   if (p->score < q->score)
   {
    temp1 = p->score;
    p->score = q->score;
    q->score = temp1;
    temp2 = p->num;
    p->num = q->num;
    q->num = temp2;
   }
   return list;
}

struct Student* sort1(struct Student* h)                //插入排序(下边这堆注释是当初写完代码后又分析时加的,这里必须承认,我参考了网上的一些代码。这里大家要是看不      
{                                                                            //懂或是不想看,就略过吧。还有,这里“结点”写成“节点”了,纠正一下,不好意思
 struct Student *f, *t, *p=NULL, *q;
 f = h->next;                  //f指向旧链的第一个节点,即等待在新链中“安家落户”(插入)的节点
 h->next = NULL;               //将原链的第一个节点单拿出来作为新

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值