zoukankan      html  css  js  c++  java
  • SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)

    点击打开链接

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

    Time Limit: 1000MS Memory Limit: 65536KB

    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)不成成立时也就说明整个数据已经被排序完成。)
    */

    
    
  • 相关阅读:
    node.js的安装与第一个hello world、node.js的初始化
    微信小程序组件学习中
    jq 滚轮监听事件
    数据库的优化(转)
    jquery zTree的基本用法
    Linux常用命令大全
    软件架构与设计 百度网盘的pdf电子书籍
    项目:IT资源共享资源(登录后端)<2>
    项目:IT资源共享资源(登录前端)<1>
    Node简单服务器开发
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586267.html
Copyright © 2011-2022 走看看