| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 461 人关注过本帖, 1 人收藏
标题:关于车皮排序问题,看到的统统进来
只看楼主 加入收藏
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
结帖率:96.15%
收藏(1)
已结贴  问题点数:30 回复次数:9 
关于车皮排序问题,看到的统统进来
这是个关于车皮排序的问题我的程序如下:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<stdlib.h>
#define LENTH sizeof(struct link)
#define N 100
#define NULL 0
typedef struct link        //定义一个链表
{
    int date;
    link *next;
}link;
link *createlink()             //建立一个链表
{
    link *top=0;                   //top指向栈顶
    link *p;
    if(!(p=(link *)malloc(LENTH)))           
    {
        exit(0);
    }
    else
    {
          top=p;           
          top->date=0;
    }
    return top;
}
link *add(link *c,int j)                   //增加栈链表
{
    link *p,*top;
    top=c+j;
    if(!(p=(link *)malloc(LENTH)))
    {
        exit(0);
    }
    else
    {
        p->next=top;
        top=p;
    }
    return top;
}
void readfile(int *m,int *n,int *a,FILE *fp)           //读取输入数据文件
{
    int i;
    char huancun;
    fscanf(fp,"%d %d",&m,&n);       //m放车皮数据的个数,n放栈个数
    for(i=0;i<*n;i++)
    {
        a[i]=fgetc(fp);              //用a数组存放车皮的数据,huancun用来过滤数据之间的空格     
        huancun=fgetc(fp);
    }
}
void outnosolution(FILE *fp2)
{
    fscanf(fp2,"NO Solution");
}
void chuli(int a[],int i,link *first,int *n,int b[],FILE *fp2)
{
    void outnosolution(FILE *fp2);
    void output(int i,int end,FILE *fp2);
    link *p,*q;
    int k=0;                              
    int outnum=0;                         //outnum表示存放输出数据数据的序号
    q=first;                              //first指向第一个栈的地址
    if(a[i]==1)                           //如果a[i]是1则放到输出数组中
    {
        b[outnum++]=a[i];
        output(0,*(n)+1,fp2);                       
    }
    else                                      
    {
        while((a[i]>(q++)->date)&&((q-first)<*(n)+1))      //如果a[i]不是1且当a[i]比该栈的栈顶元素大时,依次对每个栈引入第一个数
        {
            if((q++)->date==0)
            {
                q->date=a[i];
                output(0,q-first,fp2);
                break;
            }
        }
        if(q->date!=a[i])
        {
            if(a[i]==b[k]+1)
            {
                output(0,*(n)+1,fp2);
                k++;
            }
            else
            {
                outnosolution(fp2);                 //在输出数据文件中读入NO SOLUTION
                exit(0);
            }
        }        
        p=add(q,q-first);                                  //尾插入一个空间到当前栈
        p->date=a[i];
        p->next=q;
        q=p;
        output(0,q-first,fp2);
    }
}
void output(int i,int end,FILE *fp2)         //对数据进行输出到文件处理,end是数据移动的目标栈或数组的序号
{
    fprintf(fp2,"%d->%d\n",i,end);
}
void dwl(int *n,link *c,FILE *fp2)            //对栈的数据开始进行转移到输出数组
{
    link *q;                                    //c指向第一个栈的地址
    q=c;
    for(;(q-c)<*(n)+1;q++)                        //逐个对栈数据进行转移
    {
        while(q->date!=0)                    //在输出数据文件中读入转移的过程
        {
            output(q-c,*(n)+1,fp2);
            q=q->next;
        }
    }
}               
int main()
{
    int a[N]={0};                       //用于存放输入数据
    int b[N]={0};                             //用于存放输出数据
    int i,j=0,k=0,q=1;
    int *m=0,*n=0;                     
    link *c=0,*first;
    FILE *fp1;
    FILE *fp2;
    fp1=fopen("E:\\测试输入数据.txt","r");
    if(fp1==NULL)     //打开测试输入数据文件,并把数据的首地址赋值给fp1
    {
        printf("cannot open the file\n");
        exit(0);
    }
    fp2=fopen("E:\\测试输出数据.txt","r");
    if(fp2==NULL)     //打开测试输出数据文件,并把数据的首地址赋值给fp2
    {
        printf("cannot open the file\n");
        exit(0);
    }
    readfile(m,n,a,fp1);
    for(;(c-first)<*n;c++)
    {   
        c=createlink();        //用来存储每个数组栈的栈顶地址
        if(q--)                //用first指向第一个栈
        {
            first=c;
        }
    }
    for(i=0;i<N;i++)
    {
        chuli(a,i,first,n,b,fp2);                   //对数组a的数据进行排序输出处理
    }
    dwl(n,c,fp2);                          //开始对栈里的数据进行处理
    fclose(fp1);
    fclose(fp2);
    return 0;
}
哪个大侠帮忙看下 并在我的基础上改正下或者把你自己的代码发上来让我参考下 以下是车皮问题的文件不知道这个问题的可以下载看下
011rail.pdf (40.04 KB)


[ 本帖最后由 清风拂晓 于 2010-11-5 21:37 编辑 ]
搜索更多相关主题的帖子: 车皮 
2010-11-05 11:27
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
存在很多问题 先发上来 我自己也在调试,调试好的话我也会发上来了的

清风拂暮(木)
2010-11-05 11:32
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
进来了 有分没!
2010-11-05 11:50
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
为了不让沉下去 我只能厚着脸皮再来顶次了

清风拂暮(木)
2010-11-05 20:19
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
又修改了发上来了 再帮忙看看   语法方面没提示错误了算法好像有问题 一运行程序他就提示程序已停止工作的框子 (用的是VC++6.0的平台)

[ 本帖最后由 清风拂晓 于 2010-11-5 21:39 编辑 ]

清风拂暮(木)
2010-11-05 21:37
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
遮天云呢?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-11-06 12:56
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
你来这问我遮云天..

清风拂暮(木)
2010-11-06 13:36
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
顶下
2010-11-06 15:09
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
来个人帮我的代码调试下啊  一直不行 不知道哪里出问题了

清风拂暮(木)
2010-11-06 19:40
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:30 
以下是引用sunyh1999在2010-11-6 12:56:15的发言:

遮天云呢?

我也正在写这个算法呢~,
2010-11-06 22:10
快速回复:关于车皮排序问题,看到的统统进来
数据加载中...
 
   



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

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