SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)

本文主要是介绍SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击打开链接

数据结构实验之链表六:有序链表的建立

Time Limit: 1000MS  Memory Limit: 65536KB
Submit  Statistic  Discuss
Problem Description
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
Input
第一行输入整数个数N;
第二行输入N个无序的整数。
Output
依次输出有序链表的结点值。
Example Input
6
33 6 22 9 44 5
Example Output
5 6 9 22 33 44
Hint
不得使用数组!
Author
#include<stdio.h>
#include<stdlib.h>
struct vode
{int date;struct vode *next;
};
int main()
{struct vode *head,*tail,*p,*q;head=(struct vode *)malloc(sizeof(struct vode ));head->next=NULL;tail=head;int n,i;scanf("%d",&n);for(i=1;i<=n;i++){p=(struct vode *)malloc(sizeof(struct vode ));p->next=NULL;scanf("%d",&p->date);tail->next=p;//尾插法tail=p;}int k=0;while(k=!k)//首先给k取反,k=1,然后while()语句在判断其是否为1,等于1时才进行循环,不得不说这个这个排序算法太神奇了{p=head->next;q=p->next;while(q){if(p->date<q->date){int t;t=p->date;p->date=q->date;q->date=t;k=0;}//当while(q)时,不进入if判断语句,自然就不能给k赋值为0,(之前的while(k=!k)把k赋值为1,)在下次进入while(k=!k)时自然k就不等于1了,结束循环,(k的精妙)else{p=p->next;q=q->next;}}}p=head->next;int s=0;while(p){if(s==0){printf("%d",p->date);s=1;}else printf(" %d",p->date);p=p->next;}return 0;
}
/*总结:这个对链表数据进行排序的算法思想是首先进入循环体,找到第一组p->date>q->date的数值,先对他们两个进行排序
此时if语句执行完毕,在跳出进行while(q)的判断,显然上次进行if完成后p->date<q->date,所以这次的while(q)进入到else的语句
这时候就在开始进行找,直到找到另一组p->date>q->date的数据进行排序,直到q=NULL时结束内循环,跳出来,再从整个数据的第一组数在进行寻找(之前只要找到一组p->date>q->date
的数据,k就被重新赋值为0了,所以下次的while(k=!k)外循环肯定是成立的,当while(k=!k)不成成立时也就说明整个数据已经被排序完成。)
*/


这篇关于SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771912

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi