ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1204172 Топик полностью
Costic (29.04.2022 14:30, просмотров: 243) ответил Moлoдoй кoллeгa на Как это поможет избавиться от условия с проверкой выхода за граници перед переходом на следующий элемент?
Обычно каждый узел списка хранит значение (value) и указатель на следующий элемент (next). Последний элемент списка указывает на начало списка. Указатель - это обычно 32-битное число. Для случая, когда элементы списка размещены в массиве, т.е. последовательно, то каждый next отличается от предыдущего на константу sizeof(ListItem). В общем, меняем указатели next на индексы массива. Последний индекс/указатель направит нас в начало списка. 
#include <stdint.h>
#include <stdio.h>

typedef struct _TListItem
{
	char value;
	int  nextIndex;
}TListItem;

const TListItem aList[] = {
	{ 'A', 1 },
	{ 'B', 2 },
	{ 'C', 3 },
	{ 'D', 4 },
	{ 'E', 5 },
	{ 'F', 0 } // last node ptr to 1st
};


int main()
{
	int index = 0;

	while(1)
	{
		printf("%d - %c\t", index, aList[index].value);
		index = aList[index].nextIndex;
	}
}