• 链表的插入排序


    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    typedef struct LNode{
        int data;
        struct LNode *next;
    }*List;
    List createLinkList()
    {
        List L,pnew,prear;//定义三个指针,一个是头节点,一个是记录前驱节点的指针,一个是用来记录新节点的指针
        int i;//定义一个计数器
        L=(List)malloc(sizeof(struct LNode));//创建头节点
        prear=L;//将头节点的值赋值给prear
        for(i=0;i<10;i++)//创建十个随机数
        {
            pnew=(List)malloc(sizeof(struct LNode));//创建一个新的节点
            pnew->data=rand()%100;//产生一个随机数
            prear->next=pnew;让新节点连接到当前的链表上面
            prear=pnew;//记录当前的节点
        }
        prear->next=NULL;//尾节点指向为空
        return L;//返回头节点
    }
    void output(List L){
        List p;//定义一个用来记录的节点
        if(L){//当头节点为空的时候
            p=L->next;//指向它的后一个节点
            while(p){//当指向的为空时打印输入
                  printf("%-4d",p->data);//打印输出,以右边对齐
                  p=p->next;//指针后移
            }
            printf("\n");//打印换行
        }
    }
    void inserSort(List L){
        List p,q,tmp;//定义一个三个指针,第一个用来记录元链表,第二个用来指向新链表的前驱节点,第三个是用来记录插入节点
        if(L->next==NULL||L->next->next==NULL){//当它只有一个元素,或者元素为空时返回0
            return 0;
        }
        p=L;//指向头节点
        tmp=L->next->next;//指向第一个有效节点的下一个节点
        L->next->next=NULL;//断开与旧节点的连接
        while(tmp){//当没有数据的时候退出循环
            q=tmp->next;//纪录旧后一个节点
            while(p->next&&p->next->data<tmp->data){//当指向最后一个节点为空或者满足比当前节点大时退出循环
                p=p->next;
            }
            tmp->next=p->next;//指向要插入节点的后一个节点
            p->next=tmp;//前驱节点指向tmp
            tmp=q;//重新赋值q
            p=L;//重新赋值p
        }
        output(L);
    }
    int main(){
        List head;//定义头节点
        head=createLinkList();//创建链表
        inserSort(head);//排序之后的打印输出
        return 0;
    }
  • 相关阅读:
    侧滑界面的实现
    Private field 'XXX' is never assigned的解决办法
    android先加载注册页面而不是MainActivity主页面
    每日日报4
    每日日报3
    47 选择排序和插入排序
    计算机启动过程 BIOS MBR等
    ARM中MMU地址转换理解(转)
    深度学习框架 CatBoost 介绍
    预训练词嵌入
  • 原文地址:https://www.cnblogs.com/csnd/p/16675683.html
Copyright © 2020-2023  润新知