表示输入不进行数和列数 急等求解
本帖最后由 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);
if(h->next==NULL)
h->next=s;
else
r->next=s;
r=s;
}
r->next=NULL;
} 只能自问自答吗 你这个要完成什么功能?还是没太明白
还有传入的参数为什么要写成 HList *&h 这样呢?
这和HList h 难道不一样么
把HList 结构体的定义也在发一下吧 本帖最后由 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==q->data,则在新建单链表h中添加一个新节点。新建的单链表h采用尾插法建表放式创建的。
#include <stdio.h>
#include <malloc.h>
#define MaxCol 10
typedef int ElemType;
typedef struct Node1
{
ElemType data;
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);
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);
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==q->data)
{
s=(DList *)malloc(sizeof(DList));
for(k=0;k<h1->Col;k++)
s->data=p->data;
for(k=0;k<h2->Col;k++)
s->data=q->data;
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);
} 恩...如果单纯是指输不进行数列数的话,大概是这儿不小心错啦:
scanf("%d%d,&h->Row,&h->Col");
应为->
scanf("%d%d", &h->Row, &h->Col);
其他代码没有细看,也不做评价。 rowang 发表于 2016-5-2 19:15
恩...如果单纯是指输不进行数列数的话,大概是这儿不小心错啦:
应为->
恩 这里是我复制原先打的代码后面也发现这里并改了 不过还是不行,还是输不进;
非常感谢你的回复; W-LQ 发表于 2016-5-5 16:44
恩 这里是我复制原先打的代码后面也发现这里并改了 不过还是不行,还是输不进;
非常感谢你的回 ...
有些不太懂你的代码o(╯□╰)o
那个Node1、Node2、CreateTable、DestroyTable、DispTable、LinkTable啥的是在一个叫作"a.cpp"的文件中?那么主程序中的#include “p.cpp”又是啥?或许是打错了?
改过来后,实测数据是可以输入进去的,但因为不太清楚你要实现什么功能,所以并不知道工作是否正常。 rowang 发表于 2016-5-5 22:31
有些不太懂你的代码o(╯□╰)o
那个Node1、Node2、CreateTable、DestroyTable、DispTable、LinkTable ...
表示已解决 再次感谢! W-LQ 发表于 2016-5-7 12:21
表示已解决 再次感谢!
那就好^_^ 感谢分享{:5_105:}
页:
[1]