| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖, 1 人收藏
标题:链表:整数的分类 能帮我修改一下程序吗 求帮忙!!
只看楼主 加入收藏
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
结帖率:75%
收藏(1)
 问题点数:0 回复次数:6 
链表:整数的分类 能帮我修改一下程序吗 求帮忙!!
题目:给定N个数,每个数模M之后得到一个特征值,要求的是按照特征值从小到大输出每一个数,对于特征值相同的数,在输入数据时候,后输入的数先输出。
样例:
5 3
7 8 9 10 11

我的程序:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Hn)
struct Hn
{
int num[2];
struct Hn *next;
};

struct Hn* creat(int n,int m)
{
    struct Hn * head,*p,*q;
    head= NULL;
    p= (struct Hn *)malloc(LEN);
    scanf("%d",&p->num[0]);
    p->num[1]=p->num[0]%m;
    head=p;
     q=p;
   while(n-1)
   {
    p= (struct Hn *)malloc(LEN);
    scanf("%d",&p->num[0]);
    p->num[1]=p->num[0]%m;
    q -> next = p;
    q=p;
    --n;
   }
    q->next =NULL;
    return head;
}
struct Hn *fun(struct Hn *head,int N,int M)
{
   int j,t,i=0;
   struct Hn *p,*k;
   if(head!=NULL )
   {
       if(N==1) return head;
       else
       {
           for(t=M-1;t>=0;t--)
           {
               p=head;      
               if(p->num[1]==t)p=head;
               else
               {
                  for(j=0;p!=NULL;j++)
                  {
                     if(p->next->num[1]==t)
                     {
                 i++;
                 k=p->next;
                 p->next=k->next;
                 k->next=head;
                 head=k;
                     }
             p=p->next;
                  }
               }
           }
       }
           
   }
  return head;
}


int main()
{
    int M,N;
    struct Hn *head,*q;
    scanf("%d%d",&N,&M);
    head=creat(N,M);
    q=fun(head,N,M);
    do
    {
    printf("%d ",q->num[0]);
    q=q->next;
    }while(q!=NULL);
    printf("\n");
    return 0;
}

我的程序在某些样例就不行了
比如
 5 3
3 6 9 10 12
还有其他的一些!!!

各位高手帮帮忙? 能帮我修改一下吗? 万分感激!!!
谢谢啊
搜索更多相关主题的帖子: include 
2012-12-29 15:56
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
好像是指针越界了 各位帮帮忙啊
2012-12-29 20:57
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
各位  这是我最新修改的 不知道为什么不行啊 帮帮忙吧


#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Hn)
struct Hn
{
int num[2];
struct Hn *next;
};
struct Hn* creat(int n,int m)
{
    struct Hn * head,*p,*q;
    head=NULL;
    p= (struct Hn *)malloc(LEN);
    scanf("%d",&p->num[0]);
    p->num[1]=p->num[0]%m;
    head=p;
    q=p;
    while(n-1)
    {
    p= (struct Hn *)malloc(LEN);
    scanf("%d",&p->num[0]);
    p->num[1]=p->num[0]%m;
    q -> next = p;
    q=p;
    --n;
   }
    q->next =NULL;
    return head;
}
struct Hn *move(struct Hn *head,int a)
{
int j;
struct Hn *p,*k;
p=head;
if(head!=NULL)
{
if (a!=1)
{
for(j=1;j<a-1;j++)
p=p->next;
k=p->next;
p->next=k->next;
k->next=head;
head=k;
}
}

return head;
}


int main()
{
    int M,N,t,i,s,k=0;
    struct Hn *head,*q;
    int a[10000];
    scanf("%d%d",&N,&M);
    head=creat(N,M);
    for(t=M-1;t>=0;t--)
    {
        i=0;
        do{
            i++;
            if(q->num[1]==t)
            {
               head=move(head,i);
               q=head;
               for(s=0;s<i;s++)
                    q=q->next;   
            }
            else
                q=q->next;
        }while(q!=NULL);
    }
    for(t=0;t<N;t++)
        head=move(head,a[t]);
    q=head;
    do
    {
    printf("%d ",q->num[0]);
    q=q->next;
    }while(q!=NULL);
    printf("\n");
    return 0;
}
2012-12-29 21:56
lisky07
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2012-12-26
收藏
得分:0 
回复 楼主 樱花自在
主要改动的是struct Hn *fun(struct Hn *head,int N,int M)这个函数  
我试了 可以
不知道怎么上图 就不上了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Hn)
struct Hn
{
int num[2];
struct Hn *next;
};

struct Hn* creat(int n,int m)
{
    struct Hn * head,*p,*q;
    head= NULL;
    p= (struct Hn *)malloc(LEN);
    scanf("%d",&p->num[0]);
    p->num[1]=p->num[0]%m;
    head=p;
    q=p;
    while(n-1)
    { 
        p= (struct Hn *)malloc(LEN);
        scanf("%d",&p->num[0]);
        p->num[1]=p->num[0]%m;
        q->next = p;
        q=p;
        --n;
    }
    q->next=NULL; //=head;
    return head;
}

//主要改动的是这个函数 
struct Hn *fun(struct Hn *head,int N,int M)
{ 
    int j,t,i=0;
    struct Hn *p,*k,*restlist,*newlist;     //新与旧 两个表
    newlist=NULL;                            //新表初始值是空
    restlist=head;                            //剩余表初始值是head
    for(t=M-1;t>=0;t--)
    {
        p=restlist;                          
        restlist=NULL;
        for(j=0;p!=NULL;j++)              //可以用while循环 我没改 自己试试吧
        {    
            if(p->num[1]==t)              // 合格装入新表  **注释1 在下面 
            {
                k=p;                      
                p=k->next;                  //当前结点给k  p指向下一个
                k->next=newlist;          //把当前结点放到新表头端
                newlist=k;                //修改完成的list
            } else {                      //不合格装入剩余连表 写法同上
                k=p;
                p=k->next;
                k->next=restlist;
                restlist=k;
            }
        }
        head=newlist;
    }
  return head;
}
/*我认为
if(p->next->num[1]==t)这样写的结果 就是第一次执行时 
凡是倒数第二步不执行这一步的性质的数组都会错误,因为
执行之后就会变成循环链表 不会溢出,
而不执行就不是循环链表 所以解决之法有两种 
1.在creat中直接创建双向链表 2.就是像这样改的 
这个都是猜测
*/

int main()
{
    int M,N;
    struct Hn *head,*q;
    scanf("%d%d",&N,&M);
    head=creat(N,M);
    q=fun(head,N,M);
    do
    {
    printf("%d ",q->num[0]);
    q=q->next;
    }while(q!=NULL);
    printf("\n");
    return 0;
}

2013-01-07 12:29
lisky07
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2012-12-26
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-01-07 12:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:0 
看了两遍,猜了两遍,还是没看懂题目要求,遗憾
2013-01-07 13:01
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
谢谢各位了
2013-06-24 19:44
快速回复:链表:整数的分类 能帮我修改一下程序吗 求帮忙!!
数据加载中...
 
   



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

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