链表排序(链表排序c++代码)

本篇文章给大家谈谈链表排序,以及链表排序c++代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

C语言单向链表排序如何实现?

struct student* printf_sort(struct student *head)

{

struct student *p1,*p2,*ptemp,*pfinished=NULL;

for(p1=head;p1-next!=pfinished;)//对链表进行从大到小排序(这里用冒泡法)

//p1使之总是指向头结点,pfinished使之总是指向已排序好的最前面的结点

//ptemp作为中介纤派,保存p2的上一个结点

{

for(p2=p1;p2-next!=pfinished;)

{

if(p2-nump2-next-num)//p2的值小于p2-next的值,交换 {

if(p2==p1)//头结点要答盯交毁举贺换

{

p1=p2-next;

p2-next=p1-next;

p1-next=p2;

ptemp=p1;

}

else

{

ptemp-next=p2-next;

ptemp=p2-next;

p2-next=ptemp-next;

ptemp-next=p2;

}

}

else//不需要交换,则p2、ptemp前进1位

{

ptemp=p2;

p2=p2-next;

}

}

pfinished=p2;

}

}

关于C语言链表排序的问题

#include stdio.h 

#include stdlib.h 

#include malloc.h

struct 轮前number  //链表节点

{

int num;

struct number *next;

};

int n; 

struct number *creat() //创建链表

{

struct number *head; //头节点

struct number *p1, *p2;

n = 0;

p1 = p2 = (struct number*)malloc(sizeof(struct number));

scanf("%d", p1-num);

head = NULL;

while (p1-num != 0) //循环输脊兄入链表数据,当输入为0时结束,链表数据不包括0

{

n = n + 1;

if (n == 1)

head = p1;

else

p2-next = p1;

p2 = p1;

p1 = (struct number*)malloc(sizeof(struct number));

scanf("%d", p1-num);

p2-next = 樱桐袭NULL;

return (head);

void print(struct number *head) //链表从小到大排序,并输出

{

struct number *p1, *p2, *p;

int i, j, t;

printf("这%d个数从小到大的排序为:\n", n);

if (head != NULL)

{

//冒泡排序

for (j = 0; j  n - 1; j++)

{

p1 = head; p2 = head;

for (i = 0; i  n - 1 - j; i++)

{

p2 = p1-next;

if (p1-num = p2-num)

{

t = p1-num;

p1-num = p2-num;

p2-num = t;

}

p1 = p1-next;

}

}

}  

p = head;

if (head != NULL)

{

//输出链表值

do

{

printf("%3d", p-num);

p = p-next;

} while (p != NULL);

}

}

void main() 

{

struct number *head;

head = creat();

print(head);

}

编写程序创建一下链表并输入,对链表进行排序,从大到小

//输入n等于5

//连续输入5个数据  20 12 25 10 30

//从大到小排序后是 30 25 20 12 10

#include stdio.h

#include stdlib.h

struct linkNode

{

    int data;

    struct linkNode *next;

};

typedef struct linkNode *Link;

Link CreateLink(int n) //创建链表

{

    Link head;

    Link newNode,pNow;

    int value;

    int i;

    head=NULL;

    for(i=0;in;i++)

    {

        scanf("%d",value);

        newNode=(Link)malloc(sizeof(struct linkNode));

        if(newNode==NULL)

        {

            printf("\n分配动态内存时出错.\n");

            exit(1);

        }

        newNode-data = value;

        newNode-next = NULL;

        if(head==NULL)

        {

            head = newNode;

            pNow = newNode;

        }

        else

        {

            pNow-next = newNode;

         枝游   pNow = newNode;

        }

    }

    return head;

}

void DispLink(Link p) //输出链表的所有节点

{

    while(p)

    {

        printf("%d ",p-data);

        p = p-next;

    }

}

Link LinkSort(Link head) //选择排序法(从大到小)

{

    Link p,other,maxNode;

    int temp;

    if(head == NULL) return head;  //空链表

    for(p = head; p-next != NULL; p = p-next)

    {

       袭数 maxNode=p;

        for(other = p-next; other != NULL; other = other-next)

        {

            if(other-data  maxNode-data)

            {

                maxNode = other;

            }

        }

        if(maxNode != p)

        {

            temp = p-data;

            p-data = maxNode-data;

            maxNode-data = temp;

        }

    }

    return head;

}

int main()

{

    Link head; //链表(不带头节点)

    int n;

    printf("输入链表的长度n: ");

    scanf("%d",n);

    printf("连续输入%d个数据(以空格隔开): ",n);

    head=CreateLink(n);

    printf("\n原本链表的节点是: ");

    DispLink(head);

  拍搭首  LinkSort(head);

    printf("\n从大到小排序之后: ");

    DispLink(head);

    printf("\n");

    return 0;

}

[img]

关于链表排序和链表排序c++代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表