Сформировать с введенных чисел список, организованный как очередь - 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;
}

Объяснение кода листинга программы

  1. В данном коде используется структура данных очередь (queue), которая реализована с помощью связного списка (linked list).
  2. Код состоит из трех основных функций:
    • Push - добавляет новый элемент в начало списка.
    • Print - выводит значения всех элементов списка.
    • main - главная функция программы, в которой происходит взаимодействие с пользователем.
  3. В функции main создается указатель на начало списка (list) и инициализируется значением NULL.
  4. Пользователю предлагается ввести числа (кроме 0), разделенные пробелом.
  5. Введенные числа добавляются в список с помощью функции Push.
  6. После ввода всех чисел, список выводится на экран с помощью функции Print.
  7. Затем пользователю предлагается ввести еще числа (кроме 0), и процесс повторяется.
  8. Ввод чисел и вывод списка продолжается до тех пор, пока пользователь не введет 0.
  9. В конце программы возвращается 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы