标题:请教关于链表的排序?求找错!!
取消只看楼主
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
结帖率:100%
已结贴  问题点数:10 回复次数:8 
请教关于链表的排序?求找错!!
程序代码:

typedef struct st
{
    char name[50];
    int score;
    struct st *pnext;
}SC, *PSC;

/*排序函数*、
void sort(PSC phead)
{
    PSC p, s, t;
    int i, n, j;
    if ((p=phead->pnext)==NULL||(s=p->pnext)==NULL)
    {
        exit(0);
    }

    t = phead;
    for (i=1; i<cnt; i++)
    {
        p = phead->pnext;
        t = phead;
        for (j=0; j<cnt-i; j++)
        {
            s = p->pnext;
            if (p->score > s->score)
            {
                t->pnext = s;
                p->pnext = s->pnext;
                s->pnext = p;
                s = p;            
                p = t->pnext;      
            }
            t = p;
            p = s;
        }
    }
    p = phead;
    while(p!= NULL)
    {
        printf("\t\t\t%s\t\t%d\n", p->name, p->score);
        p = p->pnext;
    }
    system("pause");

}

搜索更多相关主题的帖子: 函数 void 
2013-05-26 10:55
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
程序代码:
typedef struct st
{
    char name[50];
    int score;
    struct st *pnext;
}SC, *PSC;
/*排序函数*/
void sort(PSC phead)
{
    PSC p, s, t;
    int i, n, j;
    if ((p=phead->pnext)==NULL||(s=p->pnext)==NULL)
    {
        exit(0);
    }

    t = phead;
    for (i=1; i<cnt; i++)
    {
        p = phead->pnext;
        t = phead;
        for (j=0; j<cnt-i; j++)
        {
            s = p->pnext;
            if (p->score > s->score)
            {
                t->pnext = s;
                p->pnext = s->pnext;
                s->pnext = p;
                s = p;            
                p = t->pnext;      
            }
            t = p;
            p = s;
        }
    }
    p = phead;
    while(p!= NULL)
    {
        printf("\t\t\t%s\t\t%d\n", p->name, p->score);
        p = p->pnext;
    }
    system("pause");

}
2013-05-26 10:57
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
我又改了一个  还是有问题??
程序代码:
void sort(PSC phead)        //链表的排序
{    
    PSC p1,p2, p3,p;
    p1=p2=phead;
    while(p1 ->pnext != NULL)
    {
        p3 = p1->pnext;
        if(p1->score < p3->score)
        {
            p2=p1->pnext;  
            p1->pnext=p2->pnext;  
            p2->pnext=p1;
            p2=p1;
        }
        else
        {
            p2=p1=p1->pnext;  
        }
    }

    p = phead;   // 输出
    while(p!= NULL)
    {
        printf("\t\t\t%s\t\t%d\n", p->name, p->score);
        p = p->pnext;
    }
    system("pause");
}
2013-05-26 11:48
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
回复 4楼 TonyDeng
那下面这个怎样?
2013-05-26 11:53
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
回复 7楼 TonyDeng
可以写, 我想尝试一下!
2013-05-26 13:57
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
欢迎大家补充!
2013-05-26 13:57
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
一切皆有可能, 保持链域不变,只交换数据域就行了!
2013-05-26 16:46
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
程序代码:
void sort(PSC phead)        //链表的排序
{    
    PSC p1, p2,p3,p4,p;
    p1=phead;
int td;
char tc[50];
p2 = p1->pnext;
p3 = (PSC)malloc(sizeof(SC));
while(p1->pnext != NULL)
{
p1 = p1->pnext;
}
p4 = p1;
p1->pnext = p3;
p3->pnext = NULL;

p1=phead;
     do
    {
p2 = p1;
while(p2->pnext != NULL)
{
if(p1->score < p2->score)
{
td = p1->score;
p1->score = p2->score;
p2->score = td;
strcpy(tc, p1->name);
strcpy(p1->name, p2->name);
strcpy(p2->name, tc);
}
p2 = p2->pnext;
}
p1 = p1->pnext;
    }while(p1->pnext != NULL);
p4->pnext = NULL;
free(p3);

p = phead;   // 输出
printf("\n\t\t排序后:\n");
while(p!= NULL)
{
printf("\t\t\t%s\t\t%d\n", p->name, p->score);
p = p->pnext;
}
system("pause");
}

void  exit0(PSC phead)
{
PSC p1, p2;    
p1=phead;
while( p1!=NULL)
{    p2=p1->pnext;
free(p1);
p1=p2;
}
}

2013-05-26 17:15
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
得分:0 
回复 11楼 邓士林
恩恩, 对, 我又写了个,请指教!
2013-05-26 17:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-408802-1-1.html




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

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