繁体   English   中英

将两个结构组合成C上的新结构?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM