Другие языки программирования и технологии
Объясните, что делает программа на Си.
#include <stdio.h> #include <stdlib.h> typedef struct list_s { int data; struct list_s *next; } list, *plist; int main() { plist head, p, p1; int a; scanf("%d", &a); head = p = (plist)malloc(sizeof(list)); p->data = a; p->next = NULL; while(1) { scanf("%d", &a); if(a < 0) break; p = (plist)malloc(sizeof(list)); p->data = a; p->next = NULL; p1 = head; while(1) { if(p1->data >= a) { p->next = p1; head = p; break; } else { if(p1->next) { if(p1->next->data >= a) { p->next = p1->next; p1->next = p; break; } p1 = p1->next; } else { p1->next = p; break; } } } } p1 = head; while(p1) { printf("%d ", p1->data); p1 = p1->next; } return 0; } Прошу прокомментировать. Программа по моему понятию сортирует список в динамической памяти. Прошу или объяснить подробно алгоритм или прокомментировать код.
Это линейный односвязный список, состоящий из элементов типа структура, который содержит отсортированные по возрастанию целые положительные числа. Первый цикл выделяет память под новый элемент и заносит его в список, а во втором цикле производится сортировка данных. Выход из внешнего цикла предусмотрен вводом целого отрицательного числа. После чего данные выводятся на экран, также в цикле, начиная с первого и переходя к следующему элементу.
Предоставленный код нерабочий. Для динамического выделения памяти следует подключать заголовочный файл <stdlib.h>.
По выходу из программы следует удалить динамические данные, используя функцию free().
Предоставляю рабочий код программы:
// Visual C++ 2010
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct list_s
{
int data;
struct list_s *next;
}
list, *plist;
void main()
{
plist head, p, p1;
int a;
printf("\n Input a1: ");
scanf("%d", &a);
head = p = (plist)malloc(sizeof(list));
p->data = a;
p->next = NULL;
while(1)
{
printf("\n Input a2: ");
scanf("%d", &a);
if(a < 0) break;
p = (plist)malloc(sizeof(list));
p->data = a;
p->next = NULL;
p1 = head;
while(1)
{
if(p1->data >= a)
{
p->next = p1;
head = p;
break;
}
else
{
if(p1->next)
{
if(p1->next->data >= a)
{
p->next = p1->next;
p1->next = p;
break;
}
p1 = p1->next;
}
else
{
p1->next = p;
break;
}
}
}
}
p1 = head;
while(p1)
{
printf("\n %d ", p1->data);
p1 = p1->next;
}
free(p);
free(head);
_getch();
}
Предоставленный код нерабочий. Для динамического выделения памяти следует подключать заголовочный файл <stdlib.h>.
По выходу из программы следует удалить динамические данные, используя функцию free().
Предоставляю рабочий код программы:
// Visual C++ 2010
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct list_s
{
int data;
struct list_s *next;
}
list, *plist;
void main()
{
plist head, p, p1;
int a;
printf("\n Input a1: ");
scanf("%d", &a);
head = p = (plist)malloc(sizeof(list));
p->data = a;
p->next = NULL;
while(1)
{
printf("\n Input a2: ");
scanf("%d", &a);
if(a < 0) break;
p = (plist)malloc(sizeof(list));
p->data = a;
p->next = NULL;
p1 = head;
while(1)
{
if(p1->data >= a)
{
p->next = p1;
head = p;
break;
}
else
{
if(p1->next)
{
if(p1->next->data >= a)
{
p->next = p1->next;
p1->next = p;
break;
}
p1 = p1->next;
}
else
{
p1->next = p;
break;
}
}
}
}
p1 = head;
while(p1)
{
printf("\n %d ", p1->data);
p1 = p1->next;
}
free(p);
free(head);
_getch();
}
Текст без форматирования невозможно читать
Александр Головин
Текст был отформатирован, тут же всё сбросилось.
В main, в начале, добавляется первый элемент, а потом, в цикле, по одному добавляются элементы.
Чтобы закончить добавление, нужно ввести отрицательное число.
Список не сортируется, так как элементы сразу добавляются в нужную позицию (несколько условий во вложенном цикле) .
В самом конце список выводится на экран.
Чтобы закончить добавление, нужно ввести отрицательное число.
Список не сортируется, так как элементы сразу добавляются в нужную позицию (несколько условий во вложенном цикле) .
В самом конце список выводится на экран.
Похожие вопросы
- Помогите написать пару программ на СИ
- Программа на Си
- Помогите с программой на си! Программа в описании
- Нужна помощь)) Есть условие задачи для создания программы на СИ++
- Требуется помощь с программа на СИ
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!
- Помогите исправить ошибку в программе на Си
- Написать программу на Си
- Программа на Си (не С++), Поля, Для экспертов.
- Как доделать программу в Си?