2014-11-14 5 views
0

Я выполняю задание программирования на данный момент, и у меня нет полного понимания ссылок, поскольку мы еще не закрыли его. Тем не менее, я чувствую, что это нужно делать то, что я хочу, как массивы не обладающего достаточнымиСоздание списков списков (Structs)

Я создал-структуру следующим образом

struct node 
{ 
float coef; 
int expo; 
struct node *link; 
}; 

из этого я могу создать указатели на структуры с разными названиями, однако проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы пользовательский ввод определял структуру I. Я также хочу возможность добавлять и создавать различные структуры.

+1

Хорошо, вам просто нужно держать указатель на голову struct, тогда вы можете найти/создать остальные во время выполнения. , , так в чем проблема? – dsolimano

+0

Проблема, с которой я сталкиваюсь, заключается в том, что выше это структура для многочлена. Но я не могу найти способ создания неопределенного количества многочленов. Таким образом, у пользователя есть выбор удалять или добавлять больше полиномов во время выполнения – user3223190

+0

Итак, каждый связанный список структур является полиномом, и вы хотите переменное число этих связанных списков? – dsolimano

ответ

1

Вам нужно создать указатель на голову, чтобы отслеживать список.

Это может быть полезно:

struct list 
{ 
    struct node *head; 
    int count; 
}; 

И вам нужно выделить память для каждого нового узла и переместить голову к вновь созданному один.

struct node *add_node(struct list *pList, float coef, int expo) 
{ 
    if (pList == NULL) 
    { 
     return NULL; 
    } 

    struct *node pNode = (struct node*)malloc(sizeof(struct node)); 

    if (node == NULL) 
    { 
     return NULL; 
    } 

    pNode->coef = coef; 
    pNode->expo = expo; 
    pNode->link = pList->head; 

    pList->head = pNode; 
    pList->count++; 

    return pNode; 
} 

Чтобы удалить элемент, вам необходимо переместить голову вперед, а затем освободить предыдущую память.

void *delete_node(struct list *pList, float coef, int expo) 
{ 
    if (pList == NULL) 
    { 
     return NULL; 
    } 


    struct node *tmp = pList->head; 

    pList->head = pList->head->link; 

    free(tmp); 

    pList->count--; 
} 

Примечание:

Это не окончательная версия. Я просто указываю пальцами на то, что нужно сделать.

0

Я хотел бы попробовать что-то подобное в качестве структуры данных

struct node 
{ 
    float coef; 
    int expo; 
    struct node *link; 
}; 

struct poly 
{ 
    node *value; 
    struct poly *link 
} 

Поддерживать связанный список poly с, каждый из которых содержит связанный список node с.

+0

Это похоже на то, что я ищу, я попробую это. Спасибо. Если это сработает, я выберу этот ответ. – user3223190

Смежные вопросы