【数据结构】线性表的应用

本文探讨了线性表在线性连接操作中的应用,特别是在处理两个表的笛卡尔积并根据特定连接条件筛选记录的问题。通过数据结构定义、基本操作算法的介绍,以及详细的运行流程和结果展示,阐述了如何利用线性表高效地处理此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

  • 问题: 假设有两个表A和B,分别是m1行、n1列和m2行、n2列,它们简单自然连接结果C=AxB(i=j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等

在这里插入图片描述

  • 什么是笛卡尔积?
    设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
    例如,A={a,b}, B={0,1,2},则
    A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
    B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
    拿题目当例子就是,不考虑 i=j 就是笛卡尔积
  • 也就是C=AxB={ (1,2,3,3,5),(1,2,3,1,6),(1,2,3,3,4),(2,3,3,3,5),(2,3,3,1,6),(2,3,3,3,4),(1,1,1,3,5),(1,1,1,1,6),(1,1,1,3,4) }
  • 取C中集合的第3列和第4列相同的元素组成一个大集合
    在这里插入图片描述

数据结构定义

  • 由于每个表的行列数都不确定,由连接条件可知要求元素每行可以随机存取,因此采用如下结构
#define MAX_COL 10

typedef struct RowHeadNode
{
   
	int a[MAX_COL];
	struct RowHeadNode* next;
}RowHeadNode;

typedef struct MaxtriHeadNode
{
   
	int row, col;
	RowHeadNode* next;
}MaxtriHeadNode;

基本操作算法

//建表
MaxtriHeadNode*  CreateTable()
{
   
	int row = 0;
	int col = 0;
	MaxtriHeadNode* h = (MaxtriHeadNode*)malloc(sizeof(MaxtriHeadNode));
	h->next = NULL;
	RowHeadNode* r = h ->next;
	printf("Please input the row num: ");
	scanf("%d", &h->row);
	printf("Please input the col num: ");
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值