链表的冒泡排序

冒泡排序与链表的冒泡排序 首先看一看简单的冒泡排序是如何实现的: #include <stdio.h> int main() { int a[100],n; printf("请输入数组元素个数:\n"); scanf("%d",&n); printf("请输入数组元素:\n"); for(int k=0;k<n;k++) scanf("%d",&a[k]); /*冒泡排序*/ for(int i=0;i<(n-1);i++) //对于n个数,只需进行n-1次循环排序 f 阅读详情
// LinkListSort.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"

typedef int DataType;

typedef struct node
{
   DataType data;
   struct node *next;
}LinkNode;

LinkNode* Insert(DataType data,LinkNode *h);
//没有带头节点
LinkNode* CreateLinkList(int num)
{
   
   LinkNode *h;
   h=(LinkNode*)malloc(sizeof(LinkNode));
   h->next=NULL;
   return h;
}
/*
  向链表中出入数据
  参数为链表的头节点,和待插入的节点的数据
*/
LinkNode* Insert(DataType data,LinkNode *h)
{
   LinkNode *p=h,*pr;
   LinkNode *q;
  
   q=(LinkNode*)malloc(sizeof(LinkNode));

   q->data=data;  
   q->next=h->next;
   h->next=q;

  
   return h;
}
/*
显示链表的数据
*/
LinkNode* ShowLinkList(LinkNode *h)
{
    LinkNode *p=h;
    printf("\n");
    while(p!=NULL)
    {
    printf("%d-",p->data);
      p=p->next;
    }
    return h;
}

//链表实现冒泡排序- 从小到大
LinkNode* SortLinkList(LinkNode *h)
{

    LinkNode *hh=h,*pr,*p,*pp,*ppr,*temp,*ph;

    DataType min;
    int flag=1; //是否是头一次的节点
    ph=h;

    while(h!=NULL)
    {
        
    
            min=h->data;        
            p=h;
            pr=p;           
            ppr=pr;
            pp=p;
         /*
           排好顺序的链表为头节点hh开头,每次都从h节点开头的
           链表冒泡出数值最小的节点,接到hh链表开头的链表尾部。
           
         */

            //开始冒泡
            while(p!=NULL)
            {
                if(p->data<min) //找出 节点值数据最小的节点
                {    
                    ppr=pr;   //最小节点的父节点
                    pp=p;     //最小节点
                    min=p->data;  //节点的最小数值
                }
                pr=p;
                p=p->next;
            }        

           /*
             找到h节点之后,数值最小的节点, pp代表该最小节点
             ppr为pp的先驱节点
           */

            if(ppr==pp)
            {            
                h=pp;
                ph->next=h;
                if(flag==1)  //在还未建立头节点时,先建立头节点,hh代表该头节点
                {
                   hh=h;flag=0; //头节点h之前的节点都是已经按从小到达的顺序排好顺序的节点,
                }    
            }else
            {    
                /*
                 如果最小节点不是头节点p的后驱节点的话
                 就把头节点h和最小数值节点兑换
                */
                if(h!=ppr)
                {
                    /*
                      交换节点 h和pp
                      用到两个的节点的先驱节点ph和ppr
                    */
                temp=h->next;
                ppr->next=h;
                h->next=pp->next;            
                pp->next=temp;                                       
                h=pp;

                if(flag==1){hh=h;flag=0;}
                else
                {
                  ph->next=h;
                }

                }else
                {  /*
                     如果最小节点p是头节点h的后驱节点的话
                     调换两个节点
                   */
                    h->next=pp->next;
                    pp->next=h;
                    h=pp;
                    if(flag==1){hh=h;flag=0;}
                    else{
                        ph->next=pp;
                    }
                }            
                
                
        }    

        ph=h;//ph为头节点h移动时的先驱节点
        h=h->next;
    }

    

    return hh;
}

int _tmain(int argc, _TCHAR* argv[])
{
     LinkNode *h;
     h=CreateLinkList(10);
     h->data=3;
     Insert(1,h);
     Insert(2,h);
     Insert(8,h);

      Insert(3,h);
      Insert(4,h);
      Insert(5,h);
      Insert(8,h);
      Insert(5,h);
      Insert(45,h);
      Insert(40,h);
      Insert(5,h);
      
      ShowLinkList(h);

     h=SortLinkList(h);
     
     ShowLinkList(h);

    return 0;
}

用链表实现冒泡排序! 一、问题描述 存储数据不仅数组可以,链表也行。那么如何用链表实现冒泡排序呢? 我们需要把数据存储在链表中,然后调用排序函数就可以了。但必须要注意链表与数组的不同点,链表没有下标,要想访问数据域必须通过节点来访问。 二、代码实现 #include #include typedef int ElemType; typedef struct Node { ElemType pData 阅读详情

相关推荐

单链表排序之冒泡排序

***单链表排序之冒泡排序*** /* 前段时间刚学会几种排序方法,最近学习了单链表,就用来试试,本篇链表的排序方法讲述的是 单链表的冒泡排序;(注意:请仔细看准节点结构体的包装和头指针的包装再阅读以下代码); 冒泡排序的思想和冒泡排序数组的方法以及冒泡排序的优化,我都已经在冒泡排序的文章中介绍了; 冒泡排序链接:http://blog.csdn.

John的博客 3万+

数据结构-冒泡排序(含全部代码)

目录 函数分析 代码 全部代码 结果截图 函数分析 下标从小到大,相邻依次比较,直到最后两个被比较,每次比较,若为逆序,则交换,以上为一趟冒泡排序。 使用一个标记,有交换时标记,若一趟下来没有需要交换的,则停止。 void BubbleSort(SqList &L) 参数:顺序表L,时间复杂度O(n^2),空间复杂度O(1),稳定性:稳定 代码 //冒泡排序 升序排序 void BubbleSort(SqList &L) { int m = L.length - 1;

关注网络安全、云原生安全 2万+

单链表冒泡排序与数组冒泡排序

冒泡排序冒泡排序是最基本也是最简单的一种排序,但是复杂度高不适合大数据的排序, 但是对于我们学习排序还是很有帮助的。冒泡排序的思想就是每遍历一次就选出最大值或最小值,类似水中的水泡一样,越到水面泡越大。 下面的链表基于这种定义:http://blog.youkuaiyun.com/dawn_after_dark/article/details/73610674形式一冒泡排序其实有好几种变形,原始的思想就是每一

dawn_after_dark的博客 1899

配图详解链表冒泡排序(交换指针域)

冒泡排序的核心是从头开始相邻数据两两比较,如果要升序,前比后大则交换,下面用图讲解链表交换指针域的原理。 代码实现: node* bubble_sort(node *head){ node *tail=NULL,*q,*p=(node*)malloc(sizeof(node)); for(p->next=head,head=p/*增加头结点*/;head->next!=tail;tail=q/*最后一个数已经排好了,所以尾部前移*/){ for(p=head,q

tongjingqi_的博客 2368

C++链表的冒泡排序

C++链表的冒泡排序 #include <iostream> using namespace std; #include <string> #include <ctime> #define NUM 10 //生成的随机数链表长度 struct Node //链表结构体的定义 { int value; Node* next; }typedef Node; void BubbleSort(Node* head); //链表冒泡排序函数 Node* No

Zzz的博客 1341

链表实现冒泡排序

自己写的程序,里面有完整的注释,主要用c语言实现。

详解单链表冒泡排序

C语言,对单链表进行冒泡排序

oTheodore的博客 2908

从分立到集成:深入解析Buck电路的核心模块与设计权衡

本文深入解析Buck电路的核心模块与设计权衡,从分立到集成方案的优缺点对比。详细探讨Buck电路的高效能量转换、小型化设计及灵活电压调节能力,并结合实际案例分享分立方案中的PWM生成、反馈环路设计及保护电路优化经验,为工程师提供实用设计参考。

weixin_29306317的博客 224

C语言单链表冒泡排序

前言 大家在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以在每一轮交换排序的时候,地址不像数组那样可以简单通过下标转换而改变 所以在这里给大家分享下单链表的冒泡排序 。 冒泡排序 先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次把最大(小)的数据放在最后...

莫影 is Joker 1万+

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2258

五段式S型算法笔记

又因为有 v-v0= 0.5jt通式: 所以有 vm-v0= 0.5jtm 所以有4vm-4v0= 2jtm。算法1: v=2vm-v0-0.5*jt+2jt*tm-2jtm*tm。加加速度j 自己设置 已知,vmax自己设置已知;所以有4vm-4v0= 2jtm带入算法1。

qq_36658033的博客 681

单链表的增删查改和冒泡排序(C语言实验代码)

C语言和数据结构

NBAFMVP的博客 217

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1005

链表冒泡排序最详细的解释

我也是小白一枚~,最近接触数据结构做到了一个关于多项式相加的问题,但是输出的多项式x的幂次都是无规律性的,这就让我开始想到刚开始我们学的冒泡排序,根据冒泡排序的原理,我实现了链表冒泡排序。 本质上来说:普通的冒泡排序和链表的冒泡排序是一样的,只不过链表的冒泡排序的内部需要结点的next不断的改变,但是从表面来看无非也是相邻的进行比较,重复n-1次,确定n个数。 废话少说,直接上代码(有详细解释,小白一看也会懂/偷笑) void AdjustList(pointer head)//链表冒泡排序,按X的幂次从小

qq_45873949的博客 6424

别再只测电压了!用STM32G474的ADC玩点花的:过采样提升精度与多通道扫描实战

本文深入探讨了STM32G474系列单片机的ADC高级应用,包括硬件过采样技术实现16位精度和多通道扫描结合DMA的自动数据采集方案。通过详细的配置步骤和实战案例,帮助开发者突破传统电压测量局限,提升信号采集精度和系统效率,适用于工业监控、医疗设备等高精度应用场景。

weixin_42647395的博客 240

高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)

是一款基于微软windows操作系统的多传感器成像工具,用于处理和分析高光谱图像。它是一个模块化的系统,由一个基本的引擎,一个图形用户界面,一个化学计量工具箱和可选的用户提供的模块组成。它支持最重要的光谱成像技术,如UV/Vis、红外、拉曼、太赫兹、光发射/吸收和质谱。除此之外,还允许用户将高光谱图像与物理属性图和传统高分辨率彩色照片合并在一起 链接:https://pan.baidu.com/s/1ruQ5YSh5_ZS9wx_V3Q5Oow 提取码:qdx0 ...

业余程序员小徐的博客 8072

冒泡排序在单链表中的使用详解

冒泡排序是一种基础而又简单的排序方法,它能够很好地锻炼新手思维能力,同样地,在链表的冒泡排序中,它能够锻炼我们链表的熟悉使用和对链表数据的处理方法。在对单链表进行冒泡排序之前,我们得先掌握三个基础知识。

yami's博客 1万+

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1718

单链表的冒泡排序

大家之前都对数组进行过冒泡排序,排序的方式很简单,通过两个for循环来解决问题,也很好理解,第一次循环的时候是将整个数组中最大的数字或者说最小的数字放到数组中的最后一个,之后是将数组中第二大或者第二小的放到数组中倒数第二个,所以直接将这个思想放到链表中就可以了。   每次循环都是从头结点开始,但是第一次结尾是最后一个元素,第二次结尾是倒数第二个元素,这里是一样的,但是链表你是不确定他到底有多少个

Hanani_Jia的博客 3716

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言—单链表的冒泡排序

C语言—单链表实现冒泡排序 昨天在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以在每一轮交换排序的时候,地址不像数组那样可以简单通过下标转换而改变 所以查了资料时候掌握了单链表的冒泡排序 分享给大家。 先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次...

wintershii的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

链表冒泡排序

任意两个相邻节点p、q位置互换图示:      假设p1->next指向p,那么显然p1->next->next就指向q,      p1->next->next->next就指向q的后继节点,我们用p2保存      p1->next->next指针。即:p2=p1->next

Gary_Hendrix的专栏 1290

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

c语言链表冒泡排序,C语言链表冒泡排序,该怎么解决

给一个简单的数组冒泡排序算法和程序c语言链表冒泡排序,注释应写具体。不要在别处粘贴代码过来。我想实习的是交换的是它们的指针域也就是每个节点而不是结点后面的数据。C/C++ codestruct Node{int data;struct Node * pNext;};假设里面已经定义好了节点,也生成了一个链表出来了(带有头结点的),现在他们即使帮我排序的代码跟算法要写具体。------解决方案---...

weixin_42520277的博客 1477

java实现链表冒泡排序_单链表的冒泡排序

起因今天利用空余时间在九度做ACM的时候,需要对单链表进行排序,由于单链表不是随机存取结构,所以我不建议用快速排序,因此采用了冒泡排序!带头节点的尾插法构建单链表//初始化带头节点的链表struct lnode *head, *s, *r, *p;head = malloc(sizeof(struct lnode));r = head;for(i = 0; i < n; i ++){scan...

weixin_36035610的博客 1117
上一篇: 学生管理系统(带名字)
下一篇: string类和c字符串
sooolo
博客等级 码龄17年 95粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值