[英]Combining two structures into new one on C?
因此,我们有一个有趣的情况。 我们应该在Linux下用C语言编写一个DBMS,并且存在以下问题:当试图联接两个关系/表时,新的关系/表的字段/列数等于两个联接关系/表的总和。 很好,但是当我们必须从两个联接关系/表中复制元组/行的数据时,我们似乎找不到办法。 元组/行通过以下结构实现为列表元素:
typedef struct element {
void *data;
struct element *next;
} Element;
通过以下功能创建新元素:
Element *
newElement (void *data)
{
Element *e = (Element*) malloc (sizeof (Element));
assert (e != NULL);
e->data = data;
e->next = NULL;
return e;
}
并以这种类型传递* data参数:
typedef struct {
int sid;
char sname[STRLEN];
int rating;
float age;
} Sailor;
问题是当我们必须合并两个关系时,我们不知道它们用于其元组/行的结构,因此我们无法从两个合并关系的元组/行中为新的关系创建新的元组/行。
请帮忙。
如果您无法在运行时定义新的结构,则类似以下内容(hack?)的方法可能会起作用。
首先定义一个只有类型ID的基本结构
typedef struct
{
int type_id; /* this holds a number which identifies the following structure */
} TypeID;
/* now all structures should contain this */
typedef struct {
TypeID type;
char sname[STRLEN];
int rating;
float age;
} Sailor;
typedef struct {
TypeID type;
char sname[STRLEN];
int sailors;
} Boat;
现在,将数据段视为这些结构的容器 ,例如,假设我将在数据中具有两个结构(即,将上面的两个结构连接在一起),我的数据段将如下所示:
----------
| Sailor |
+--------+
| Boat |
----------
读取数据块时,首先将其转换为TypeID
,这将为您提供类型,然后可以将其转换为实际结构。 然后,如果数据段中有更多数据,则将指针移动刚刚读取的结构的大小,然后再次执行相同的过程。 基本上,这使您可以拥有可变长度的段,该段是一组不同类型的结构-即您联接的数据结构。
哦,您将需要修改Element
结构以容纳数据段的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.