如何处理嵌套列表?

时间:2014-01-23 12:59:25

标签: c linked-list nested fill

小时。我正在编写程序来分析pascal中的代码。我已经创建了这样的衬里列表

typedef struct lista1   //list which contains var, const and types!
{
    int rodzaj; //1 - variables, 2 - constants, 3 - types
    char nazwa[128];
    char add[128];
    struct lista1 *wsk;
}lista1;

typedef struct lista2
{
    int rodzaj; //1 - procedures, 2 - functions
    char nazwa[128];
    char typ[128];
    struct lista2 *wsk;
    lista1 *var_loc;
    lista1 *const_loc;
    lista1 *type_loc;
}lista2;

我的问题是:如何填充那些嵌套列表(var_loc,const_loc,type_loc)?我试图在这个目的上做一些功能,但我有很多错误。请告诉我该怎么做。

1 个答案:

答案 0 :(得分:0)

此代码创建一个包含5个元素的外部列表(head),每个元素都包含10个元素的内部列表:

int i, j;

lista2 *head = NULL, *new=NULL;
lista1 *new2 = NULL;

for(i = 0; i < 5; i++){
    new = (lista2*)malloc(sizeof(lista2));
    new->wsk = head;
    head = new;
    new->var_loc = NULL;
    sprintf(new->typ, "external list, element %d", i);
    for(j = 0; j < 10; j++){
        new2 = (lista1*)malloc(sizeof(lista1));
        new2->wsk = new->var_loc;
        new->var_loc = new2;
        sprintf(new2->add, "internal list, element %d", j);
    }
}

// Print list contents
lista2 *p2;
lista1 *p1;

for(p2 = head; p2; p2=p2->wsk){ // iterate over ext. list
    printf("%s\n", p2->typ);
    for(p1 = p2->var_loc; p1; p1 = p1->wsk){ // iterate over int. list
        printf("  %s\n", p1->add);
    }
}