Заполнить массив указателей вложенной структуры - 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.
- Создается структура
nstrс указателем на массив структурstrи переменной для хранения количества элементов. - Инициализируется указатель
aна структуруnstrс помощьюmalloc. - Указатель
a->ptrинициализируется какNULL. - Генерируется случайное количество элементов массива с помощью
rand(). - В цикле
forсоздается каждый элемент массива с помощьюmalloc. - Каждый элемент массива присваивается случайная буква с помощью
rand(). - Выводится каждый элемент массива с помощью
printf. - В цикле
forосвобождаются все выделенные элементы массива с помощьюfree. - Освобождается указатель на массив структур
strс помощьюfree. - Освобождается указатель на структуру
nstrс помощьюfree.