Простой вопрос насчёт списков для профессионалов .
Делаю задание со списками. Компилятор выдаёт ошибку. В чём может быть проблема ?
#include <stdio.h>
#include <stdlib.h>
#define KOL 3 /*количество произвольных чисел*/
struct data
{
int a;
};
struct list
{
data d;
list *next;
};
void print(list *ptr);
void insert(list **u, data &x);
int main(int argc, char *argv[])
{
if(argc != 2){
printf("Error.");
return 1;
}
FILE *f;
int *arr, i, cnt;
list *u = NULL;
data x;
if ( ( f = fopen(argv[1], "r") ) == NULL ){
fprintf(stderr, "can't open file %s for input!\n", argv[1]);
exit(1);
}
cnt = 0;
while ( fscanf(f, "%d", &i) == 1 ){
if ( ( arr = (int*)realloc(arr, sizeof(int) * (cnt + 1)) ) == NULL ){
fprintf(stderr, "Memory error!\n");
fclose(f);
exit(1);
}
x.a = i;
insert(&u, x);
}
fclose(f);
print(u);
for(int j = 0; j < KOL; j++){ /* вводи дополнительные числа */
printf("number %d>", j);
scanf("%d", &i);
x.a = i;
insert(&u, x);
}
print(u);
return 0;
}
/*функция вставки*/
void insert(list **u, Data &x)
{
/* вставка в список одного элемента перед элементом,*/
/*меньшим или равным данному x*/
list *p = new List;
p->d.a = x.a;
if(*u == 0) /* исходный список пуст - вставка в начало */
{
p->next = 0;
*u = p;
return;
}
list *t = *u;
if(t->d.a <= p->d.a) /* исходный список не пуст -
вставка в начало */
{
p->next = t;
*u = p;
return;
}
list *t1 = t->next;
while(t1)
{
if(t->d.a > p->d.a && p->d.a >= t1->d.a)
{ /* вставка в середину */
t->next = p;
p->next = t1;
return;
}
t = t1;
t1 = t1->next;
}
t->next = p; /* добавляем в конец списка */
p->next = 0;
}
/* функция вывода */
void print(List *ptr){
while(ptr){
printf("%d", (ptr->d).a);
ptr = ptr->next;
}
}