鱼C论坛

 找回密码
 立即注册
查看: 3874|回复: 9

表示输入不进行数和列数 急等求解

[复制链接]
发表于 2016-4-17 22:49:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 W-LQ 于 2016-5-5 16:45 编辑

void CreateTable(HList *&h)
{
        int i,j;
        DList *r, *s;
        h=(HList *)malloc(sizeof(HList));
        printf("表的行数,列数:");
        scanf("%d%d",&h->Row,&h->Col);
        for (i=0;i<h->Row;i++)
        {        printf("第%d行:",i+1);
                s=(DList *)malloc(sizeof(DList));
                for(j=0;j<h->Col;j++)
                        scanf("%d",&s->data[j]);
                if(h->next==NULL)
            h->next=s;
                else
                        r->next=s;
        r=s;
        }
        r->next=NULL;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-20 17:18:57 | 显示全部楼层
只能自问自答吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-21 22:34:00 | 显示全部楼层
你这个要完成什么功能?还是没太明白
还有传入的参数为什么要写成 HList *&h 这样呢?
这和  HList h 难道不一样么

把HList 结构体的定义也在发一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-22 23:41:02 | 显示全部楼层
本帖最后由 W-LQ 于 2016-5-7 12:19 编辑
shuofxz 发表于 2016-4-21 22:34
你这个要完成什么功能?还是没太明白
还有传入的参数为什么要写成 HList *&h 这样呢?
这和  HList h 难 ...


这是整个的了
目的: 为的是完成两个表h1和h2的自然连接
算法思路是先要输入两个表的连接序号i和j,然后扫描单链表h1。对与h1的每个节点,从头至尾扫描单链表h2,若自然连接条件成立,即h1的当前节点*p和h2的当前节点*q满足:p->data[i-1]==q->data[j-1],则在新建单链表h中添加一个新节点。新建的单链表h采用尾插法建表放式创建的。



#include <stdio.h>
#include <malloc.h>
#define MaxCol 10
typedef int ElemType;
typedef struct Node1                  
{
        ElemType data[MaxCol];
        struct Node1 *next;        
}DList;
typedef struct Node2         
{
        int Row,Col;
        DList *next;
}HList;
void CreateTable(HList *&h)
{
        int i,j;
        DList *r, *s;
        h=(HList *)malloc(sizeof(HList));
        printf("表的行数,列数:");
        scanf("%d%d",&h->Row,&h->Col);
        for (i=0;i<h->Row;i++)
        {        printf("第%d行:",i+1);
                s=(DList *)malloc(sizeof(DList));
                for(j=0;j<h->Col;j++)
                        scanf("%d",&s->data[j]);
                if(h->next==NULL)
            h->next=s;
                else
                        r->next=s;
        r=s;
        }
        r->next=NULL;
}
void DestroyTable(HList *&h)
{
        DList *pre=h->next, *p=pre->next;
        while(p!=NULL)
        {
                free(pre);
                pre=p;
                p=p->next;
        }
        free(pre);
        free(h);
}
void DispTable(HList *h)
{
        int j;
        DList *p=h->next;
    while(p!=NULL)
        {
                for(j=0;j<h->Col;j++)
                        printf("%4d",p->data[j]);
                printf("\n");
                p=p->next;
        }
}
void LinkTable(HList *h1,HList *h2,HList *&h)
{
        int i,j,k;
        DList *p=h1->next,*q,*s,*r;
        printf("连接字段是:第1个表序号,第2个表序号:");
        scanf("%d%d",&i,&j);
    h=(HList *)malloc(sizeof(HList));
        h->Row=0;
        h->Col=h1->Col+h2->Col;
        h->next=NULL;
    while(p!=NULL)
        {
                q=h2->next;
                while(p!=NULL)
                {
                        if(p->data[i-1]==q->data[j-1])
                        {
                                s=(DList *)malloc(sizeof(DList));
                                for(k=0;k<h1->Col;k++)
                                        s->data[k]=p->data[k];
                                for(k=0;k<h2->Col;k++)
                    s->data[h1->Col+k]=q->data[k];
                                if(h->next==NULL)
                                        h->next=s;
                                else
                                        r->next=s;
                                r=s;
                                h->Row++;
                        }
                        q=q->next;
                }
                p=p->next;
        }
        r->next=NULL;
}
//这是主程序
#include"p.cpp"
void main()
{
        HList *h1,*h2,*h;
        printf("表1:\n");
        CreateTable(h1);
        printf("表1:\n");
        CreateTable(h2);
        LinkTable(h1,h2,h);
        printf("连接表结果:\n");
        DestroyTable(h1);
        DestroyTable(h2);
        DestroyTable(h);
               
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-2 19:15:21 | 显示全部楼层
恩...如果单纯是指输不进行数列数的话,大概是这儿不小心错啦:
scanf("%d%d,&h->Row,&h->Col");
应为->
scanf("%d%d", &h->Row, &h->Col);

其他代码没有细看,也不做评价。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 16:44:38 | 显示全部楼层
rowang 发表于 2016-5-2 19:15
恩...如果单纯是指输不进行数列数的话,大概是这儿不小心错啦:

应为->

恩   这里是我复制原先打的代码  后面也发现这里并改了   不过还是不行,还是输不进;

非常感谢你的回复;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 22:31:55 | 显示全部楼层
W-LQ 发表于 2016-5-5 16:44
恩   这里是我复制原先打的代码  后面也发现这里并改了   不过还是不行,还是输不进;

非常感谢你的回 ...

有些不太懂你的代码o(╯□╰)o

那个Node1、Node2、CreateTable、DestroyTable、DispTable、LinkTable啥的是在一个叫作"a.cpp"的文件中?那么主程序中的#include “p.cpp”又是啥?或许是打错了?

改过来后,实测数据是可以输入进去的,但因为不太清楚你要实现什么功能,所以并不知道工作是否正常。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 12:21:36 | 显示全部楼层
rowang 发表于 2016-5-5 22:31
有些不太懂你的代码o(╯□╰)o

那个Node1、Node2、CreateTable、DestroyTable、DispTable、LinkTable ...

表示已解决    再次感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-7 12:27:02 | 显示全部楼层
W-LQ 发表于 2016-5-7 12:21
表示已解决    再次感谢!

那就好^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-3 14:48:53 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表