如何根据链表节点数据大小对链表节点进行排序

2023-11-19

对链表排序有两种方法:
(1)比较了两个节点的大小后,对指针进行改变,从而交换节点的顺序;
(2)比较了两个节点的大小后,只交换数据域,而不改变指针,从而交换节点的顺序。
第二种办法比较简单,本文主要对第二种方法进行讲解。
链表节点排序算法,采用(冒泡排序)。
定义一个指针end,end最开始时赋值为空,再经过一次比较后,找到一个最大值,将该最大值的指针赋给end;每次循环找到该次循环中的最大值,都将其指针赋值给end,等于说end每次循环结束,都会向前移动一个节点,这样就可以根据end和头节点是否相等作为排序结束条件,因为end指向的节点及其后面的节点中的数据肯定是大于end之前的,所以没有必要比较,因此每次循环根据是否到达end作为该次循环结束条件。
最开始: 定义一个指针end,end最开始时赋值为空。在这里插入图片描述
第一次比较:找到一个最大值,将该最大值的指针赋给end;end就指向了第一次找到的最大值。
在这里插入图片描述

第n次比较:每次循环找到该次循环比较中的最大值,都将其指针赋值给end。
在这里插入图片描述

最后一次循环:每次循环结束,end都会向前移动一个节点,这样就可以根据end和头节点是否相等作为整个排序结束的条件。
在这里插入图片描述
程序源码:
//排序源码

link_node_t* bubblesort(link_node_t* head)     //head是有头链表
{  
    head = head->next;                  
    if (head == NULL) return NULL;            
    //定义一个尾,初值为空,以后为每次的最大值  
    link_node_t* end = NULL;  
    while (end != head)  
    {  
        //p和pnext一前一后
        link_node_t* p = head;               //p在前
        link_node_t* pnext = head->next;     //pnext在后  
        while (pnext != end)  
        {  
            //比较相邻的节点数据
            if (p->size < pnext->size)          
            {  
                //数据交换
                swapS(p->data, pnext->data);      //交换函数名(字符串)
                swapI(&p->size, &pnext->size);   //交换数据(整型)
            }  
            //p和pnext同时向后移动一个节点
            p = p->next;  
            pnext = pnext->next;  
        }  
        //该次循环结束,找到的该次循环中的最大值。
        end = p;  
    }  
    return head;  
} 

数据交换程序

这里封装两个交换函数,一个是对字浮串进行交换,一个是对整型进行交换。
void swapI(int* a, int* b)  
{  
    int temp = 0;  
    temp = *a;  
    *a = *b;  
    *b = temp;  
}  
void swapS(char* arr, char* brr)  
{  
    char temp[N] = {0};  
    strcpy(temp,arr);  
    strcpy(arr,brr);  
    strcpy(brr,temp);  
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据链表节点数据大小对链表节点进行排序 的相关文章

随机推荐

  • 将XML格式文件转换JSON文件格式

    XMl文件转JSON字符串 1 1Maven引入依赖
  • 光栅尺的相关知识

    光栅尺的相关知识 1 光栅尺的原理 2 光栅尺的精度 3 光栅尺的制造 4 增量式光栅尺和绝对式光栅尺的区别 5 光栅尺的选择 6 光栅尺与编码器 1 光栅尺的原理 我们可以类比普通卷尺 尺子上面有刻度 以这些刻度作为基准 你只需要把要测的
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • [机缘参悟-86]:清心寡欲,世外修行 ?负剑下山,闯荡江湖?

    天地者 万物之逆旅也 光阴者 百代之过客也 而浮生若梦 为欢几何
  • Android Fragment 真正的完全解析(下)

    本篇将介绍上篇博客提到的 如何管理Fragment回退栈 Fragment如何与Activity交互 Fragment与Activity交互的最佳实践 没有视图的Fragment的用处 使用Fragment创建对话框 如何与ActionBa
  • 5月10日 ksjsb抓包教程,小黄鸟无需ROOT抓包

    1 先下载抓包工具 小黄鸟 自己搜索 注意 这里下载完小黄鸟app后 安装打开时 该下载的安全证书下载 手机root权限该给的都给 2 打开小黄鸟工具 添加目标应用 快手极速版 3 启动小黄鸟 然后退出让它后台运行 打开快手极速版到菜单栏找
  • Windows下PP-Tracking多目标跟踪数据训练

    PP Tracking之手把手玩转多目标跟踪 飞桨AI Studio 人工智能学习与实训社区PP Tracking之手把手玩转多目标跟踪 飞桨AI Studio 人工智能学习与实训社区https aistudio baidu com ais
  • IDEA2023.1.3自带插件禁用,减少内存占用

    前言 前两个星期安装了idea2023 1 3 之前用的一直是idea2020 3版本 我发现新版界面确实更好看一些 而且启动速度也非常快 打开多个项目也一样很快 都是秒开 但是吧 它的内存占用比idea2020 3版高了很多 刚打开的时候
  • TensorRT Samples: GoogleNet

    关于TensorRT的介绍可以参考 http blog csdn net fengbingchun article details 78469551 以下是参考TensorRT 2 1 2中的sampleGoogleNet cpp文件改写的
  • 【前端面经】instanceof相关知识

    原理 instanceof是javascript语言中的一个运算符 用于检测一个对象是否是一个类或者构造函数的实例 它的语法是boject instanceof constructor 其中object是要检测的对象 constructor
  • JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现

    JS常见加密 AES DES RSA MD5 SHAI HMAC Base64 Python JS实现 文章目录 JS常见加密 AES DES RSA MD5 SHAI HMAC Base64 Python JS实现 前言 一 编码 加密
  • 数据结构(C语言)——双链表

    有了单链表的编写经验 双链表变得格外容易 点击看前一篇 单链表 下面是代码 include
  • 三类XML文件的解析方法

    XML文件的解析 mybatis的学习当中 配置的加载传统的是通过解析用户配置的文件 获取到数据库连接与对象实体映射关系的 书中有描述到DOM SAX StAX 几种方案 一方面是夯实基础 一方面是了解三种方法的优缺点 今天就学习一下XML
  • 创建类似软键盘的无焦点对话框程序

    如果想创建一个类似windows里的屏幕键盘式的程序 由于需要将模拟键盘的输入发送到原来处于活动状态的程序 因此 我们的程序应该不改变原来的焦点 在vc6和vc 中可以通过以下方式实现 1 VC6 0中 在对话框的OnInitDialog
  • MQ如何保证消息的顺序一致性问题?

    产生原因 MQ服务器集群化或MQ采用分区模型架构来存放消息 每个分区对于一个消费者消费消息 解决消息一致性问题 核心思想 消息一定要投递到同一个MQ 且是同一个分区模型且被用一个消费者消费 可以根据消息key对分区模型总数取余来实现 1 大
  • 【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-03

    云原生 监控 基于Prometheus的云原生集群监控 理论 实践 03 k8s服务组件指标 kubernetes云原生集群作为大规模多节点容器调度平台 在交付和部署上的巨大优势逐渐让其称为一种技术趋势 如基于工作负载快速进行扩 缩容 故障
  • c++通讯录管理系统

    系统需求 代码 include
  • 7-37 5门课的平均分 7-38 等边三角形面积

    目录 7 37 5门课的平均分 输入格式 输出格式 样例 gt 输入样例 输出样例 思路 代码 7 38 等边三角形面积 输入格式 输出格式 输入样例 输出样例 思路 代码 7 37 5门课的平均分 输入5门课程成绩 整数 求平均分 结果保
  • 安装nextcloud文档

    root nextcloud php v PHP 7 2 24 cli built Oct 22 2019 08 28 36 NTS Copyright c 1997 2018 The PHP Group Zend Engine v3 2
  • 如何根据链表节点数据大小对链表节点进行排序

    对链表排序有两种方法 1 比较了两个节点的大小后 对指针进行改变 从而交换节点的顺序 2 比较了两个节点的大小后 只交换数据域 而不改变指针 从而交换节点的顺序 第二种办法比较简单 本文主要对第二种方法进行讲解 链表节点排序算法 采用 冒泡