zoukankan      html  css  js  c++  java
  • 链表递归排序

    问题描述

    输入以空格隔开的数字,使用链表递归升值排序。如输入:12 5 7 8 9 8 输出:5 7 8 8 9 12


    #include <stdio.h>
    #include <stdlib.h>
    #define LEN sizeof(SNODE)
    
    typedef struct node
    {
    	int num;
    	struct node *next;
    }SNODE;
    
    //打印函数
    void print(SNODE *head)
    {
    	head=head->next;
    	while(head!=NULL)
    	{
    		printf("%d ",head->num);
    		head=head->next;
    	}
    
    	putchar('
    ');
    }//print
    
    //建表函数
    void creatLink(int n,SNODE *head)
    {
    	SNODE *p,*q;
    	p=head;
    	while(p->next!=NULL) p=p->next;//找到最后一个节点
    	
    	q=(SNODE*)malloc(LEN);
    	q->num=n;
    	q->next=NULL;
    
    	p->next=q;
    
    }//creatLink
    
    //排序函数
    SNODE* sortLink(SNODE *head)
    {
    	SNODE *p=head,*q=head;
    	if(head->next!=NULL)	//链表非空
    	{
    		while(p->next!=NULL)
    		{
    			if(p->next->num < q->next->num)//查找最小节点
    			{
    				q=p;			//q指向最小节点的前一个节点
    			}
    			
    			p=p->next;
    		}
    
    		p=q->next;				//p指向本轮最小节点
    		q->next=q->next->next;	//将本轮最小节点从链表中剔除
    		p->next=head->next;	//将原来头节点后的节点接到最小节点的后面
    		head->next=p;			//将最小节点接到头节点后面
    		sortLink(head->next);	//将最小节点作为头节点进行递归调用
    	}
    	
    	return head;
    }//sortLink
    
    int main()
    {
    	SNODE *head;
    	head=(SNODE*)malloc(LEN);//创建头节点
    	head->next=NULL;
    	head->num=-1;
    	int n;
    	char c;
    	while(1)
    	{
    		scanf("%d",&n);//读入一个整形
    		creatLink(n,head);//加入链表
    		c=getchar();//吃掉空格
    		if(c=='
    ') break;
    	}
    	print(head);//打印原链表
    	sortLink(head);//递归排序
    	print(head);//打印排序后的链表
    	return 0;
    }//main
    
  • 相关阅读:
    07.swoole学习笔记--tcp客户端
    06.swoole学习笔记--异步tcp服务器
    04.swoole学习笔记--webSocket服务器
    bzoj 4516: [Sdoi2016]生成魔咒
    bzoj 3238: [Ahoi2013]差异
    bzoj 4566: [Haoi2016]找相同字符
    bzoj 4199: [Noi2015]品酒大会
    后缀数组之hihocoder 重复旋律1-4
    二分查找
    内置函数--sorted,filter,map
  • 原文地址:https://www.cnblogs.com/DismalSnail/p/10543179.html
Copyright © 2011-2022 走看看