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

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

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

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

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

textual
Листинг программы
  1. typedef
  2. struct _str{ char ch; }str;
  3. typedef
  4. struct _nstr
  5. {
  6.     str **ptr;
  7.     int ns;
  8. }nstr;
  9.  
  10. void main(int argc,char* argv[])
  11. {  
  12.     int i,n;
  13.     nstr *a;
  14.    
  15.     a=malloc(sizeof(nstr));
  16.     a->ptr=NULL;
  17.     a->ns=0;
  18.     srand((unsigned)time(0));
  19.     n=1+rand()%10;
  20.     for(i=0; i<n; i++)
  21.     {
  22.         a->ptr=realloc(a->ptr,sizeof(str*)*++a->ns);
  23.         a->ptr[i]=malloc(sizeof(str));
  24.         a->ptr[i]->ch='A'+rand()%26;
  25.     }
  26.     for(i=0; i<a->ns; i++) printf("%c\n",a->ptr[i]->ch);
  27.     for(i=0; i<a->ns; i++) free(a->ptr[i]);
  28.     free(a->ptr);
  29.     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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы