В список после каждого максимального числа вставить номер в списке - C (СИ)
Формулировка задачи:
Нужно в не рассортированный список вещественных чисел после каждого максимального числа вставить номер в списке и номер среди максимальных элементов этого же списка.
Решение задачи: «В список после каждого максимального числа вставить номер в списке»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
struct clist {
double value;
struct clist* link;
};
struct mpair {
double value;
size_t count;
};
struct clist * mk_node(double value, struct clist * lst) {
struct clist * node = (struct clist *)calloc(1, sizeof(*node));
node->value = value;
node->link = lst;
return node;
}
void destroy(struct clist * lst) {
struct clist* tmp;
while (lst) {
tmp = lst;
lst = lst->link;
free(tmp);
}
}
struct mpair count_max(struct clist const * lst) {
struct mpair m;
struct clist const* tmp;
m.count = 0;
m.value = 0.0;
if (lst) {
m.count = 1;
m.value = lst->value;
tmp = lst->link;
while (tmp) {
if (m.value == tmp->value)
m.count++;
else if (m.value < tmp->value){
m.count = 1;
m.value = tmp->value;
}
tmp = tmp->link;
}
}
return m;
}
struct clist * insert(double value, struct clist *lst) {
lst->link = mk_node(value, lst->link);
return lst->link;
}
void mk_work(struct clist* lst) {
size_t id, i;
struct mpair m = count_max(lst);
i = 0; id = 0;
while (i < m.count) {
if (lst->value == m.value) {
lst = insert(i, insert(id, lst));
++i;
}
lst = lst->link;
++id;
}
}
int main() {
return 0;
}