Создать кольцевой односвязный список, элементы которого будут вводиться с клавиатуры - C (СИ)
Формулировка задачи:
Нужно сделать кольцевой односвязный список, элементы которого будут вводиться с клавиатуры.
Я новичок в Си, создал список, получил количество элементов в списке, но организовать цикл заполнения его элементами не получается, надеюсь на вашу помощь.
Решение задачи: «Создать кольцевой односвязный список, элементы которого будут вводиться с клавиатуры»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct NODE { int value; struct NODE * next; } node_t; void push(node_t ** pRing, int nValue) { node_t * pNode = malloc(sizeof(node_t)); assert ( pNode ); pNode->value = nValue; if ( ! *pRing ) { pNode->next = pNode; *pRing = pNode; } else { pNode->next = (*pRing)->next; (*pRing)->next = pNode; *pRing = pNode; } } void rotate(node_t ** pRing, int steps) { assert ( *pRing && steps > 0 ); while ( steps-- ) *pRing = (*pRing)->next; } int top(const node_t * ring) { return ring->value; } int is_empty(const node_t * ring) { return ( ! ring ); } int shift(node_t ** pRing) { int ret; assert ( *pRing ); ret = (*pRing)->value; if ( (*pRing)->next == *pRing ) { free(*pRing); *pRing = NULL; } else { node_t * pPrev = (*pRing)->next; while ( pPrev->next != *pRing ) pPrev = pPrev->next; pPrev->next = (*pRing)->next; free(*pRing); *pRing = pPrev->next; } return ret; } int main(void) { node_t * ring = NULL; int i; printf("adding 5 elements...\n"); for ( i = 1; i < 6; ++i ) push(&ring, i); printf("Value on top: %d\n", top(ring)); printf("Rotating by 3 steps...\n"); rotate(&ring, 3); printf("Now on top: %d\n", top(ring)); printf("Purge all values from that point...\n"); while ( ! is_empty(ring) ) printf("%d ", shift(&ring)); return 0; }
Объяснение кода листинга программы
- В начале кода определяются структура узла и две функции:
push
иrotate
. - Структура узла содержит целочисленное значение и указатель на следующий узел.
- Функция
push
добавляет новый узел в кольцевой список, вводя значение с клавиатуры. - Функция
rotate
поворачивает кольцевой список на заданное количество шагов. - В функции
main
создаётся пустой кольцевой список и заполняется пятью элементами с клавиатуры. - Выводится значение элемента, находящегося на вершине списка.
- Кольцевой список поворачивается на три шага.
- Выводится значение элемента, находящегося на вершине списка после поворота.
- Все элементы списка удаляются с помощью функции
shift
. - Возвращается значение 0, сигнализирующее о успешном завершении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д