Заполнить массив указателей вложенной структуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть две структуры для двоичного дерева поиска
typedef struct _price {
    double price;
    char* shopname;
} pricing;
 
typedef struct _bstnode {
    int id;
    pricing** pl;
    int nr_of_prices;
    struct _bstnode *left;
    struct _bstnode *right;
    struct _bstnode *parent;
} bstnode;
Есть функция которая добавляет в узел название магазина и цену, для одного узла может быть несколько, названий и цен подскажите как это реализовать
void updatePrice(bstnode* root, int id, char* shop, double price){
//to do
}
Конкретно одно название магазина и цену я могу добавить
        (*(root->pl))=malloc(sizeof (pricing));
        (*(root->pl))->price=price;
        (*(root->pl))->shopname=shop;
а вот несколько? и Потом их удалить ?

Решение задачи: «Заполнить массив указателей вложенной структуры»

textual
Листинг программы
typedef
struct _str{ char ch; }str;
typedef
struct _nstr
{
    str **ptr;
    int ns;
}nstr;
 
void main(int argc,char* argv[])
{   
    int i,n;
    nstr *a;
    
    a=malloc(sizeof(nstr));
    a->ptr=NULL;
    a->ns=0;
    srand((unsigned)time(0));
    n=1+rand()%10;
    for(i=0; i<n; i++)
    {
        a->ptr=realloc(a->ptr,sizeof(str*)*++a->ns);
        a->ptr[i]=malloc(sizeof(str));
        a->ptr[i]->ch='A'+rand()%26;
    }
    for(i=0; i<a->ns; i++) printf("%c\n",a->ptr[i]->ch);
    for(i=0; i<a->ns; i++) free(a->ptr[i]);
    free(a->ptr);
    free(a);

Объяснение кода листинга программы

В этом коде создается динамический массив указателей на структуры str.

  1. Создается структура nstr с указателем на массив структур str и переменной для хранения количества элементов.
  2. Инициализируется указатель a на структуру nstr с помощью malloc.
  3. Указатель a->ptr инициализируется как NULL.
  4. Генерируется случайное количество элементов массива с помощью rand().
  5. В цикле for создается каждый элемент массива с помощью malloc.
  6. Каждый элемент массива присваивается случайная буква с помощью rand().
  7. Выводится каждый элемент массива с помощью printf.
  8. В цикле for освобождаются все выделенные элементы массива с помощью free.
  9. Освобождается указатель на массив структур str с помощью free.
  10. Освобождается указатель на структуру nstr с помощью free.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы