| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 915 人关注过本帖, 1 人收藏
标题:单链表排序问题
只看楼主 加入收藏
easygo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-11-21
结帖率:0
收藏(1)
 问题点数:0 回复次数:8 
单链表排序问题
单链表排序,最简单的,只进行数值排序,就像数组,而不换地址,要怎样实现,求教
2016-03-23 12:56
koma仔
Rank: 1
来 自:"><a>s</a
等 级:新手上路
帖 子:15
专家分:8
注 册:2015-3-9
收藏
得分:0 
申请节点啊   跟数组排序一样的  只不过操作复杂一点    ,需要注意的细节多一点  ,,冒泡就能完成   
2016-03-23 13:23
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
你要怎么展示你的排序结果,怎么输出?

   唯实惟新 至诚致志
2016-03-23 13:48
easygo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-11-21
收藏
得分:0 
回复 3楼 qq1023569223
排序后
p=head;
while(p!=NULL)
{
    printf(....);
    p=p->next;
}
2016-03-23 14:48
easygo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-11-21
收藏
得分:0 
回复 2楼 koma仔
主要是程序执行到排序的时候,就奔溃,不知道为啥,所以想要完整点的操作,我用的是交换法
2016-03-23 14:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct node
{
    int n;
    struct node* next;
};

//注意在这里最后一个节点p->next=NULL
struct node* create()
{
    struct node* p;
    struct node* head;
    int i=0;

    struct node* q=(struct node*)malloc(sizeof(struct node));
    q->n=0;
    head=q;

    for(;i<10;i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->n=i+1;

        q->next=p;
        q=p;
    }

    q->next=NULL;

    return head;
}

void swap(struct node* p,struct node* q)
{
    int tmp;
    //仅交换数值,节点不变
    tmp=p->n;
    p->n=q->n;
    q->n=tmp;
}

void print(struct node* head)
{
    struct node* p=head;

    for(;p->next!=NULL;p=p->next)
    {
        printf("%d ",p->n);
    }
}

int main()
{
    struct node* head=create();
    struct node* p;
    struct node* q;
    //p->next!=NULL决定了最后一个节点虽有数字,但不会被使用,要想被使用,就得额外增加一个空节点
    for(p=head;p->next!=NULL;p=p->next)
    {
        for(q=p->next;q->next!=NULL;q=q->next)
        {
            if(p->n<q->n)
            {
                swap(p,q);
            }
        }
    }

    print(head);

    return 0;
}

   唯实惟新 至诚致志
2016-03-23 16:02
easygo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-11-21
收藏
得分:0 
回复 6楼 qq1023569223
//p->next!=NULL决定了最后一个节点虽有数字,但不会被使用,要想被使用,就得额外增加一个空节点
这句是什么意思啊
2016-03-23 20:27
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
比如上面程序create里面有11个节点,但排序后只输出了10个节点,为什么呢?因为我们判断链表结束的条件是next!=NULL,而最后一个节点的next=NULL,所以不论什么时候它都被抛弃了。假如我增加一个临时节点在最后面,它只是临时的没有存储我们要的数据,设置它的next=NULL,那么我们有用的节点都能起作用了。
程序代码:
struct node* create()
{
    struct node* p;
    struct node* head;
    int i=0;

    struct node* q=(struct node*)malloc(sizeof(struct node));
    q->n=0;
    head=q;

    for(;i<10;i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->n=i+1;

        q->next=p;
        q=p;
    }
    /*****临时节点*****/
    p=(struct node*)malloc(sizeof(struct node));
    q->next=p;
    p->n=-1;
    p->next=NULL;
    /*****临时节点*****/

    return head;
}

   唯实惟新 至诚致志
2016-03-23 21:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用easygo在2016-3-23 12:56:21的发言:

单链表排序,最简单的,只进行数值排序,就像数组,而不换地址,要怎样实现,求教

把它化成數組排序,這是提示。至於放在數組中的是什麽,按什麽標準排,你開動腦筋想一想,沒蒙你的。這樣排序之後,不會變動鏈表中任何一個結點的地址!

授人以渔,不授人以鱼。
2016-03-24 15:29
快速回复:单链表排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025583 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved