C 单向链表排序_单向链表排序java

C 单向链表排序_单向链表排序java链表排序链表排序的两种方式一、交换结点的数据域二、断开链表,重新形成方法示例链表排序的两种方式一、交换结点的数据域有很多种方法,比如冒泡排序,选择排序等其他排序方法structNode*link_sort(structNode*head){ intvalue; structNode*p=head; structNode*q=NULL; while(p) { q=p->next; while(q) { if(p->data&g

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

链表排序的两种方式

一、交换结点的数据域

有很多种方法,比如冒泡排序,选择排序等其他排序方法

struct Node *link_sort(struct Node *head)
{ 
   
	int value;
	struct Node *p = head;
	struct Node *q = NULL;

	while(p)
	{ 
   
		q = p->next;
		while(q)
		{ 
   
			if(p->data > q->data)
			{ 
   
				value = p->data;
				p->data = q->data;
				q->data = value;
			}
			q = q->next;
		}
		p = p->next;
	}

	return head;
}

二、断开链表,重新形成

方法

跟三指针法反转链表类似,也是要定义三个结构体指针。

第一步:
第一个指针用于找最小值
第二个指针用于指向最小值的前一个结点
第三个指针用于遍历链表

第二步:
让最小值从链表当中脱离出来

第三步:
然后再定义一个新的指针,用头插法把指向最小值的指针
形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。

示例

struct Node *link_sort(struct Node *head)
{ 
   
	struct Node *p = NULL;
	struct Node *pMin = NULL;
	struct Node *pMin_prev = NULL;
	struct Node *newHead = NULL;

	while(head)
	{ 
   
		//找到一个最值结点后,重新操作,原链表的结点个数不断减少
		p = head;
		pMin = head;
		pMin_prev = NULL;

		//1、找最值,遍历原链表
		while(p->next)
		{ 
   
			if(pMin->data > p->next->data) //结点数据域比较
			{ 
   
				pMin_prev = p; //标记
				pMin = p->next;
			}
			p = p->next;
		}
		//2、将最值结点脱离出原链表
		if(pMin == head) //情况一,刚好最值就是头结点
		{ 
   
			head = head->next; //原链表头节点往后移
			pMin->next = NULL; //断开连接,同时防止它乱指
		}
		else
		{ 
   
			pMin_prev->next = pMin->next;//断开结点
			pMin->next = NULL;
		}
		//3、插法入新链表,两种情况
		if(newHead == NULL)
		{ 
   
			newHead = pMin;
		}
		else
		{ 
   
			//头插法
			pMin->next = newHead;
			newHead = pMin;
		}
	}
	
	return newHead;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183186.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OpenCV—python 边缘检测(Canny)「建议收藏」

    OpenCV—python 边缘检测(Canny)「建议收藏」一、OpenCV-Python中Canny()参数"""cv2.Canny(image,#输入原图(必须为单通道图)threshold1,threshold2,#较大的阈值2用于检测图像中明显的边缘[,edges[,apertureSize[,#…

    2022年5月29日
    43
  • 数据结构与算法(1)

    数据结构与算法(1)

    2021年11月12日
    54
  • 分布式数据存储系统:CAP理论

    分布式数据存储系统:CAP理论分布式数据存储:CAP理论前言什么是CAP?CAP选择策略及应用保CA弃P保CP弃A保AP弃C对比分析知识扩展:CAP和ACID的“C”“A”是一样的吗?总结前言分布式系统处理的关键对象是数据,而数据其实是与用户息息相关的。CAP理论指导分布式系统的设计,以保证系统的可用性、数据一致性等特征。比如电商系统中,保证用户可查询商品数据、保证不同地区访问不同服务器查询的数据是一致的等。什么是CAP?假设某电商,在北京、杭州、上海三个城市建立了仓库,同时建立了对应的服务

    2025年6月10日
    0
  • 如何成为一名卓越的数据科学家?

    如何成为一名卓越的数据科学家?

    2022年3月4日
    37
  • mysql数据目录的路径(数据库中的数据不可以共享)

    安装配置指南----------------一、下载SourceOffsiteV4.2官方下载地址,可以试用30天,试用期间无任何功能限制。http://search.newhua.com/search.asp?Keyword=sourceoffsite现在国内也有相关的中文版下载,本人使用没有什么区别,可能就是多一个VSS6.0。如果大家连VSS6.0都没有,就建议下载中文版。二、

    2022年4月13日
    42
  • 什么是数据安全软件?「建议收藏」

    什么是数据安全软件?「建议收藏」数据安全软件有各种形式和大小。工具存在并且旨在保护所有类型的数据,从单个消息到整个数据库。每家公司,无论规模大小,都应将数据安全作为核心业务实践,并尽其所能确保存储在其业务每个缝隙中的数据受到保护;任何对敏感信息的盗窃都可能损害企业和客户。

    2022年5月21日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号