LINUX.ORG.RU

Сообщения Sneezy

 

Простой вопрос насчёт списков для профессионалов .

Делаю задание со списками. Компилятор выдаёт ошибку. В чём может быть проблема ?

#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; 

}

}
 

 ,

Sneezy
()

RSS подписка на новые темы