| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 970 人关注过本帖
标题:C语言链表排序问题,我总是排不好,本人菜鸟,勿怪
只看楼主 加入收藏
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
结帖率:66.67%
收藏
 问题点数:0 回复次数:11 
C语言链表排序问题,我总是排不好,本人菜鸟,勿怪
以下贴出我的源代码,其它函数没有问题,可能编译和正常运行,可是sort_link函数就有错误了
#include "stdio.h"
#include "stdlib.h"
struct node
{int data;
 char name[10];
 struct node *next;
};
typedef struct node LINK;
#define MAL (LINK *)malloc(sizeof(LINK))
LINK *creat_link()
{LINK *head,*s,*r;
 r=head=MAL;
 s=MAL;
 printf("PLease input data and name:");
 scanf("%d%s",&s->data,s->name);
 while(1)
   {r->next=s;
   r=s;
   s=MAL;
   printf("Please input data and name:");
   setbuf(stdin,NULL);
   scanf("%d",&s->data);
   if(s->data==-1)
      break;
   setbuf(stdin,NULL);
   scanf("%s",s->name);
  }
 r->next=0;
 return head;
}
void print_link(LINK *head)
{
   if(head->next==0)
      printf("Link is NULL!");
   else
      for(head=head->next;head!=0;head=head->next)
          printf("%d %s\n",head->data,head->name);
}
LINK *sort_link(LINK *head)
{LINK *q,*p,*temp;
  for(q=head;q->next!=0;q=q->next)
         for(p=q->next;p!=0;p=p->next)
                 if(q->next->data>p->next->data)
                  {temp=p;
                    q->next=p->next;
                    q->next=temp;
                    temp->next=p;
                  }/*就是这里了,我总是写错,不知道该怎么改?*/
 print_link(head);
}
main()
{LINK *head;
 head=creat_link();
 print_link(head);
 sort_link(head);
 printf("Enter anykey to exit. . .");
 setbuf(stdin,NULL);
 getchar();
}
搜索更多相关主题的帖子: C语言 
2011-07-12 00:36
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
收藏
得分:0 
求大神啊

你若安好便是晴天
2011-07-12 00:36
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
先讲第一个->name 前不用加地址&,在scanf部分
2011-07-12 09:12
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
收藏
得分:0 
回复 3楼 多布斯的喵喵
额,这个高手那你接下来还是先说说这个sort_link函数吧,我给改成这样了,可是还是不能排序成功
LINK *sort_link(LINK *head)
{LINK *q,*h,*p,*temp;
  int n=0;
  for(q=head;q->next!=0;q=q->next)
          for(h=q,p=q->next;p!=0;p=p->next)
            {if(n)
               {n=0;
                 h->next=temp;
                 temp->next=p;
               }
             if(h->next->data>p->next->data)
              {n=1;
                temp=p;
                h->next=p->next;
              }
             h=p;
            }
 print_link(head);
}
高手帮帮忙好吗

你若安好便是晴天
2011-07-12 21:33
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
收藏
得分:0 
回复 3楼 多布斯的喵喵
貌似那个输入->name前我没有加&

你若安好便是晴天
2011-07-12 21:35
版主是SB
Rank: 2
等 级:禁止发言
帖 子:24
专家分:34
注 册:2011-7-12
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

vandychan版主是**, 你们懂的
2011-07-12 21:43
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
收藏
得分:0 
回复 6楼 版主是SB
我->name前没加&

你若安好便是晴天
2011-07-12 22:48
赵立华
Rank: 1
来 自:甘肃庆阳
等 级:新手上路
帖 子:7
专家分:8
注 册:2011-5-15
收藏
得分:0 
#include "stdio.h"
#include "stdlib.h"
struct node
{
    int data;
    char name[10];
    struct node *next;
};
typedef struct node LINK;
#define MAL (LINK *)malloc(sizeof(LINK))
LINK *creat_link()
{
    LINK *head,*s,*r;
    r=head=MAL;
    s=MAL;
    printf("PLease input data and name:");
    scanf("%d%s",&s->data,s->name);
    while(1)
   {
        r->next=s;
         r=s;
        s=MAL;
        printf("Please input data and name:");
        setbuf(stdin,NULL);
        scanf("%d",&s->data);
        if(s->data==-1)
         break;
        setbuf(stdin,NULL);
        scanf("%s",s->name);
  }
    r->next=0;
    return head;
}
void print_link(LINK *head)
{
   if(head->next==0)
      printf("Link is NULL!");
   else
      for(head=head->next;head!=0;head=head->next)
          printf("%d %s\n",head->data,head->name);
}
void sort_link(LINK *head)
{   
    LINK *q,*p,*temp;
    for(q=head;q->next!=0;q=q->next)
         for(p=q->next;p->next!=0;p=p->next)
                 if(q->data>p->data)
                  {
                     temp->data=p->data;
                    q->data=p->data;
                    q->data=temp->data;
                    //temp->next=p;
                  }/*就是这里了,我总是写错,不知道该怎么改?*/
            print_link(head);
}

int main()
{
    LINK *head;
    head=creat_link();
    print_link(head);
    sort_link(head);
    printf("Enter anykey to exit. . .");
    setbuf(stdin,NULL);
    getchar();
    return 0;
}


看对了没
2011-07-12 23:58
brisk
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2011-3-26
收藏
得分:0 
回复 8楼 赵立华
额,那个大神,你这个貌似是交换数据了吧,我要的是交换节点

你若安好便是晴天
2011-07-13 01:54
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用版主是SB在2011-7-12 21:43:06的发言:

先讲第一个->name 前不用加地址&,在scanf部分

好犀利的ID

[ 本帖最后由 ansic 于 2011-7-13 08:40 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-07-13 08:38
快速回复:C语言链表排序问题,我总是排不好,本人菜鸟,勿怪
数据加载中...
 
   



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

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