Создать двунаправленный циклический список, заменить элементы модулем - 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 и выводим на экран.
- Заменяем значения узлов списка модулем и снова выводим на экран.