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