0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 56

Отсортировать список по возрастанию, а затем сформировать новый список

15.12.2015, 16:49. Показов 2332. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан список с элементами целого типа. Отсортировать его по возрастанию, а затем сформировать новый список, состоящий из нечетных элементов исходного списка . Вывести на экран исходный список до сортировки и после сортировки, а так же полученный список порядковых номеров.


помогите наладите функцию сортировки )


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "stdio.h" 
#include "malloc.h" 
typedef struct Item 
{ 
struct Item* prev; 
struct Item* next; 
int data; 
} Item; 
//функции работы со строкой 
Item* CreateList(); 
Item* GetList(); 
int AddSymbol(Item*, int); 
void PrintList(Item*); 
void DeleteList(Item*); 
int getInt(int*); 
int main() { 
char ex = 'Y'; 
int i = 0; 
int buf = 0; 
Item* I; 
Item* I1; 
Item* Temp; 
Item* Temp2; 
Item* min; 
while (ex == 'Y' || ex == 'y') { 
puts("Enter list"); 
I = GetList(); 
I1 = CreateList(); 
Temp = I; 
Temp2 = I; 
i = 0; 
PrintList(I); 
while (Temp->next) 
{ 
if (Temp->next->data % 2) 
AddSymbol(I1, i); 
i++; 
Temp = Temp->next; 
} 
Temp = I; 
while (Temp->next) 
{ 
Temp2 = Temp; 
min = Temp; 
while (Temp2->next) 
{ 
if (Temp2->next->data < min->next->data) 
min = Temp2; 
Temp2 = Temp2->next; 
} 
if (min != Temp) 
{ 
buf = min->next->data; 
min->next->data = Temp->next->data; 
Temp->next->data = buf; 
} 
Temp = Temp->next; 
} 
PrintList(I); 
PrintList(I1); 
DeleteList(I); 
DeleteList(I1); 
puts("If you want to continue, enter Y, else enter N"); 
ex = 'i'; 
while (ex != 'Y' && ex != 'y' && ex != 'N' && ex != 'n') 
scanf("%c", &ex); 
} 
return 0; 
} 
 
//////////функци работы со списком///////// 
 
Item* CreateList() { 
Item* S = (Item*)calloc(1, sizeof(Item)); 
S->data = 0; 
S->next = NULL; 
S->prev = NULL; 
return S; 
} 
 
Item* GetList() { 
int Buf = 0; 
int res = 0; 
int i; 
Item* List = CreateList(); 
while (res != -1) { 
 
res = getInt(&Buf); 
if (res > 0) 
AddSymbol(List, Buf); 
} 
return List; 
} 
int AddSymbol(Item* String, int Buf) { 
if (String) { 
while (String->next) { 
String = String->next; 
} 
String->next = (Item*)calloc(1, sizeof(Item)); 
String->next->prev = String; 
String->next->next = NULL; 
String->next->data = Buf; 
return 0; 
} 
else { 
return 1; 
} 
} 
void PrintList(Item* S) { 
if (S) { 
S = S->next; 
while (S) { 
printf("%d ", S->data); 
S = S->next; 
} 
printf("\n"); 
} 
} 
void DeleteList(Item* S) { 
if (S&&S->next) { 
while (S->next) { 
S = S->next; 
} 
S = S->prev; 
while (S->prev) { 
free(S->next); 
S = S->prev; 
} 
free(S->next); 
} 
} 
int getInt(int* d) 
{ 
int n; 
do 
{ 
n = scanf("%d", d); 
if (n == 0) 
{ 
puts("Incorrect input."); 
scanf("%*c"); 
} 
} while (n == 0); 
return n; 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2015, 16:49
Ответы с готовыми решениями:

Отсортировать список в алфавитном порядке по фамилии, а затем по возрастанию года рождения
В текстовом файле содержатся записи о студентах. Для каждого студента известны его фамилия, имя, отчество, год рождения, оценки по пяти...

Отсортировать список по возрастанию и сформировать два новых списка
Дан список, содержащий числовые данные. Отсортировать его по возрастанию и сформировать два новых списка таким образом, чтобы половина...

Отсортировать список и сформировать новый, состоящий из порядковых номеров его четных элементов
Дан список с элементами целого типа. Отсортировать его по возрастанию, а затем сформировать новый список, состоящий из порядковых номеров...

1
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
15.12.2015, 18:37
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
struct item {
    struct item* next;
    struct item* prev;
    int data;
};  
 
typedef struct list {
    struct item* head;
    struct item* tail;
} list_t;
 
void list_init(list_t* lst);
int  list_add(list_t* lst, int data);
void list_clear(list_t* lst);
void list_swap(list_t* lst, struct item* p1, struct item* p2);
 
//сортировка выбором
void list_sort(list_t* lst){
    struct item* p, *k, *i;
    for(p = lst->head; p != NULL; p = p->next){
        k = p;
        for(i = p->next; i != NULL; i = i->next){
            if(i->data < k->data)
                k = i;
        }
        if(k != p){
            list_swap(lst, k, p);
            p = k;
        }
    }
}
 
int main(void){
    int    i;
    const struct item* p;
    list_t lst;
    list_init(&lst);
    
    for(i = 0; i < 20; ++i)
        list_add(&lst, rand() % 10);
 
    for(p = lst.head; p != NULL; p = p->next)
        printf("%d ", p->data);
    putchar('\n');
    for(p = lst.tail; p != NULL; p = p->prev)
        printf("%d ", p->data);
    puts("\n\n");
    
    list_sort(&lst);
 
    //вывод после сортировки
    for(p = lst.head; p != NULL; p = p->next)
        printf("%d ", p->data);
    putchar('\n');
    for(p = lst.tail; p != NULL; p = p->prev)
        printf("%d ", p->data);
    putchar('\n');
    list_clear(&lst);
    return 0;
}
 
//инициализация
void list_init(list_t* lst){
    lst->head = lst->tail = NULL;
}
 
//добавление в конец списка
int list_add(list_t* lst, int data){
    struct item* p = (struct item*)malloc(sizeof(struct item));
    if(p != NULL){
        p->data = data;
        p->next = p->prev = NULL;
        if(lst->head == NULL)
            lst->head = lst->tail = p;
        else {
            p->prev   = lst->tail;
            lst->tail->next = p;
            lst->tail = p;
        }
    }
    return (p != NULL);
}
 
//удаление всех
void list_clear(list_t* lst){
    struct item* t;
    while(lst->head != NULL){
        t = lst->head;
        lst->head = lst->head->next;
        free(t);
    }
    lst->tail = NULL;
}
 
// обмен
void list_swap(list_t* lst, struct item* p1, struct item* p2){
    struct item* r1, *r2, *t1, *t2;
    r1 = p1->prev; 
    r2 = p2->prev;
 
    if(r1 != NULL) r1->next = p2;
    p2->prev = r1;
 
    if(r2 != NULL) r2->next = p1;
    p1->prev = r2;
 
    t1 = p1->next;
    t2 = p2->next;
                
    p1->next = p2->next;
    if(t2 != NULL) t2->prev = p1;
 
    p2->next = t1;
    if(t1 != NULL) t1->prev = p2;
 
    if(lst->head == p1)
        lst->head = p2;
    else if(lst->head == p2)
        lst->head = p1;
 
    if(lst->tail == p1)
        lst->tail = p2;
    else if(lst->tail == p2)
        lst->tail = p1;
}
Пример работы кода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2015, 18:37
Помогаю со студенческими работами здесь

Сформировать список из вещественных чисел. Упорядочить список по возрастанию.
решить через односвязные списки..=( Сформировать список из вещественных чисел. Упорядочить список по возрастанию.

Сформировать новый линейный список однонаправленный список, содержащий только нечетные элементы
Даны 2 линейных однонаправленных списка с элементами целого типа. Количество элементов и их значения - случайные числа. Сформировать новый...

Сформировать односвязный список так, чтобы после вставки каждого нового значения, список оставался отсортированным по возрастанию
сформировать односвязный список целочисл знач, таким образом чтобы после вставки каждого нового значения, список оставался отсортированным...

Составить алгоритм и программу, которая вначале выводит список всех отличников, затем список хорошистов, троечников, а затем двоечников в ячейки листа
Имеется список группы и оценка каждого студента на экзамене. Составить алгоритм и программу, которая вначале выводит список всех...

Отсортировать список по возрастанию
Здравствуйте! Помогите, пожалуйста, отсортировать список(причем в двоичном коде из файла) по возрастанию. Состоит из структур: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru