В список после каждого максимального числа вставить номер в списке - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д