Создать двунаправленный циклический список, заменить элементы модулем - C (СИ)
Формулировка задачи:
Создать двунаправленный циклический список, заменить элементы модулем
Есть заготовки
struct list2 {int data; list2 *next; list2 *prev; }; list2 *root,*p,*q,*fin; root=new list2; root->data=10; root->next=root; root->prev=root; for(i=1;i<N;i++) {q=new list2; q->data=10*(i+1); q->next=root; q->prev=root->prev; root->prev->-next=q; root->prev=q; root=q; }
Решение задачи: «Создать двунаправленный циклический список, заменить элементы модулем»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <assert.h> typedef struct node_t { int value; struct node_t* next; struct node_t* prev; } TNode; //----------------------------------------------------------------------------- TNode* Push(TNode** list, int value) { assert(list); TNode* node = (TNode*) malloc(sizeof(TNode)); node->value = value; if (*list) { node->next = *list; node->prev = (*list)->prev; (*list)->prev->next = node; (*list)->prev = node; } else { node->next = node->prev = node; *list = node; } return *list; } //----------------------------------------------------------------------------- void ForAll(TNode* list, void (*func)(int*)) { assert(func); TNode* node = list; if (list) { while (node->next != list) { func(&node->value); node = node->next; } func(&node->value); } } //----------------------------------------------------------------------------- void Print(int* value) { printf("%d ", *value); } //----------------------------------------------------------------------------- void Abs(int* value) { *value = abs(*value); } //----------------------------------------------------------------------------- int main() { srand(time(NULL)); size_t count = rand() % 20 + 1; TNode* list = NULL; while (count--) { Push(&list, rand() % 20 - 10); } ForAll(list, Print); printf("\n"); ForAll(list, Abs); ForAll(list, Print); printf("\n"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , . - Объявляем структуру узла списка TNode.
- Создаём функцию Push, которая добавляет новый узел в начало списка.
- Создаём функцию ForAll, которая обходит все узлы списка и применяет к каждому узлу указанную функцию.
- Создаём функции для обхода списка: Print для вывода значения узла и Abs для замены значения узла модулем.
- В функции main создаём список, заполняем его случайными значениями от -10 до 10 и выводим на экран.
- Заменяем значения узлов списка модулем и снова выводим на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д