1

Тема: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Умова: Розробити програму, яка створює списки L1 і L2, елементами яких є  цілі числа (елементи у списку L1 у порядковані за неспаданням, а у списку L2 розміщені довільно). Вставляє елементи списку L2 у L1 так, щоб L1 залишився упорядкованим. Виводить модифікований список L1.
Незнаю, чому не працює, вроді все правильно

#include <stdio.h>
#include <string.h>

typedef struct list {
   int inf;
   struct list *next;
                   } L1;

void input_L1(L1 *st)
{
   L1 *pt = NULL, *q = NULL;
   int n, i;
   printf("Enter N = "); scanf("%d", &n);
   for (i = 0; i < n; i++)
   {
       q = (L1*)calloc(1, sizeof(L1));
       printf("Next: "); scanf("%d", &(q -> inf));
       q -> next = NULL;
       if (st == NULL) st = q;
       else pt -> next = q;
       pt = q;
   }
}

void insert (L1 *st1, L1 *st2)
{
   L1 *pt1, *q = NULL, *pt2 = st2;
   while (pt2 != NULL)
   {
       pt1 = st1;
       while ((pt1 -> next -> inf) < (pt2 -> inf))
           pt1 = pt1 -> next;
       q = (L1*)calloc(1, sizeof(L1));
       q = pt2;
       q -> next = pt1 -> next;
       pt1 -> next = q;
       pt2 = pt2 -> next;
   }
}
void main ()
{
  L1 *st1 = NULL, *st2 = NULL, *pt1 = NULL, *q = NULL;;
  printf("List 1\n-------------\n");
  input_L1(st1);
  printf("\nList 2\n-------------\n");
  input_L1(st2);
  insert(st1, st2);
  pt1 = st1;
  while(pt1 != NULL)
  {
      printf("%d ", *(pt1 -> inf));
      q = pt1;
      pt1 = pt1 -> next;
      free(q);
  }
}

2

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

CasperUa написав:

Незнаю, чому не працює

Вмикаю телепатор:
- тому що у вас вимкнули електрику
- тому що ви не увімкнули комп'ютер
- тому що ви намагаєтеся запустити це в Turbo Pascal
А тепер годі телепатії, і опишіть КОНКРЕТНО, ЩО НЕ ПРАЦЮЄ.

3

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Найімовірніше проблема в функції insert

4

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

CasperUa написав:

Найімовірніше проблема в функції insert

Давайте кидати кубик?

5

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Ну на мою думку ввід правильно написано, значить проблема в insert'і)

6

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Ви можете, врешті-решт, дати конкретний опис проблеми?

7

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Вибачте. Програма після вводу списків зависає. Думаю, що проблема у функції insert

8

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

pt1 = st1;
while ((pt1 -> next -> inf) < (pt2 -> inf))//хто сказав, що pt1->next взагалі існує?
  pt1 = pt1 -> next;
q = (L1*)calloc(1, sizeof(L1));
q = pt2;//а пам'ять, що щойно виділили, губимо?

9

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Можете переписати цю функцію? А то я геть запутався

10

Re: Вставити елементи довільного списку L2 в упорядкований L1 так, щоб L1

Напишіть окрему процедуру
insert_sorted(L1 *root, L1 *element);
і додавайте елементи по одному, щоб не заплутатися