Сформировать с введенных чисел список, организованный как очередь - C (СИ)
Формулировка задачи:
С клавиатуры вводится последовательность вещественных чисел, упорядоченных за спаданием. Сформировать с введенных чисел список, организованный как очередь. Потом ввести с клавиатуры еще два вещественных числа, и вставить их в список так, чтобы сберечь общую последовательность. Разработать отдельную функцию, которая вводит к списку два новых элемента.
Вот что у меня, пока что получается...
Возникли проблемы с добавлением новых чисел)
#include <stdio.h> #include <stdlib.h> typedef struct spysok{ double chys; spysok *sled; } SPYS; SPYS *input(SPYS *end); SPYS *list; void dobavyt(double chys,SPYS *end); void print(); int main (){ SPYS *end = NULL; printf("\nEnter number in order decay (0 - end) = "); do{ end = input(end); }while(end != NULL); print(); printf("\nEnter two numbers: "); int i = 0; double chys; getchar (); getchar (); return 0; } SPYS *input(SPYS *end){ SPYS *p; p = (SPYS*)malloc(sizeof(SPYS)); double r; scanf("%lf", &p->chys); if(p->chys == 0){ free(p); return NULL; } p->sled = NULL; if(list == NULL) list = p; else end->sled = p; return p; } void print(){ SPYS *p = list; while(p != NULL) { printf(" %.2lf",p->chys); p = p->sled; } } void dobavyt(double chys,SPYS* end){ SPYS *p = list, *t = end; while(p != NULL){ if(p->chys < chys){ }}}
Решение задачи: «Сформировать с введенных чисел список, организованный как очередь»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> typedef struct node_t { double value; struct node_t* next; } TList; //----------------------------------------------------------------------------- void Push(TList** list, double value) { TList* node; if ((*list == NULL) || ((*list)->value > value)) { node = malloc(sizeof(TList)); node->value = value; node->next = *list; *list = node; } else { Push(&(*list)->next, value); } } //----------------------------------------------------------------------------- void Print(const TList* list) { for (; list; list = list->next) { printf("%.2lf ", list->value); } printf("\n"); } //----------------------------------------------------------------------------- int main() { TList* list = NULL; double value; printf("Enter numbers (press 0 for quit) = "); while (((scanf("%lf", &value)) == 1) && (value != 0)) { Push(&list, value); } Print(list); printf("Enter more numbers (press 0 for quit) = "); while (((scanf("%lf", &value)) == 1) && (value != 0)) { Push(&list, value); } Print(list); return 0; }
Объяснение кода листинга программы
- В данном коде используется структура данных
очередь
(queue), которая реализована с помощью связного списка (linked list). - Код состоит из трех основных функций:
- Push - добавляет новый элемент в начало списка.
- Print - выводит значения всех элементов списка.
- main - главная функция программы, в которой происходит взаимодействие с пользователем.
- В функции main создается указатель на начало списка (list) и инициализируется значением NULL.
- Пользователю предлагается ввести числа (кроме 0), разделенные пробелом.
- Введенные числа добавляются в список с помощью функции Push.
- После ввода всех чисел, список выводится на экран с помощью функции Print.
- Затем пользователю предлагается ввести еще числа (кроме 0), и процесс повторяется.
- Ввод чисел и вывод списка продолжается до тех пор, пока пользователь не введет 0.
- В конце программы возвращается 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д