#include<stdio.h>
#include<malloc.h>
#define maxcol 10
typedef int ElemType;
typedef struct dlist
{
ElemType data[maxcol];
struct dlist *next;
}Dlist;
typedef struct hlist
{
int row;
int col;
Dlist *next;
}Hlist;
void creatlist(Hlist **h);
void destory(Hlist **h);
void displist(Hlist *h);
void lianjielist(Hlist *h1,Hlist *h2,Hlist **h);
void creatlist(Hlist **h)
{
if((*h) == NULL)
{
Dlist *p,*s;
int i = 0;
int j = 0;
*h = malloc(sizeof(Hlist));
(*h)->next = NULL;
printf("请输入表的行和列\n");
scanf("%d,%d",&(*h)->row,&(*h)->col);
while(i < (*h)->row)
{
p = malloc(sizeof(Dlist));
printf("请输入第%d行的数据\n",i+1);
for (j = 0;j<(*h)->col;j++)
scanf("%d",&p->data[j]);
if((*h)->next == NULL)//注意由于表的头结点与后面的数据节点不是同一结构体类型,才需分情况。
(*h)->next = p;
else
s->next = p;
s = p;//只有不是头结点,数据节点才可赋值。
i++;
}
s->next = NULL;
}
}
void destory(Hlist **h)
{
Dlist *s = (*h)->next;
Dlist *p;
while(s)
{
p = s->next;
free(s);
s = p;
}
free(*h);
*h = NULL;
}
void displist(Hlist *h)
{
Dlist *p = h->next;
int i = 0;
while(p)
{
for(i = 0;i< h->col;i++)
printf("%4d",p->data[i]);
printf("\n");
p = p->next;
}
}
void lianjielist(Hlist *h1,Hlist *h2,Hlist **h)
{
Dlist *s = h1->next;//用s控制连接的停止。
Dlist *p,*r;//r指向h表的最后一个节点
Dlist *q = h2->next;
int i = 0,j = 0;
int a,b;
printf("请输入连接的条件:第a列等于b列(a,b)\n");
scanf("%d,%d",&a,&b);
*h = malloc(sizeof(Hlist));
(*h)->col = h1->col + h2->col;
(*h)->next = NULL;
(*h)->row = 0;
while(s)//指向第一个表的当前处理的节点
{
q = h2->next;
while(q)//指向第二个表的当前处理的节点
{
if(s->data[a-1] == q->data[b-1])
{
p = malloc(sizeof(Dlist));
for(i = 0;i<h1->col;i++)
p->data[i] = s->data[i];
for(j = 0;j<h2->col;j++)
p->data[j+i] = q->data[j];
if((*h)->next == NULL)
(*h)->next = p;
else
r->next = p ;
r = p;
(*h)->row++;
}
q = q->next;
}
s = s->next;
}
r->next = NULL;//第一次忘了写,很重要
}
int main(void)
{
Hlist *h1 = NULL,*h2 = NULL,*h = NULL;
creatlist(&h1);
creatlist(&h2);
printf("表1的元素为:\n");
displist(h1);
printf("表2的元素为:\n");
displist(h2);
lianjielist(h1,h2,&h);
displist(h);
destory(&h);
destory(&h1);
destory(&h2);
return 0;
}
//p53(数据结构)李春煲
两个表指定条件的笛卡尔连接
最新推荐文章于 2024-08-05 03:09:01 发布