#cpp
// TElement - это один элемент, единица хранения так сказать
struct TBlock
{
TBlock* pNextBlock;
TElement* pData;
}
class TCluster
{
size_t block_size; // кол-во TElement-ов на блок; size_t - это подходящий целочисленный тип, достаточно большой для индексации всех блоков и всех элементов в блоке
TBlock* pFirstBlock;
TElement * get(size_t index)
{
size_t iBlockIndex = index / block_size;
size_t iElementIndex = index % block_size; // остаток от деления
TBlock* pBlock = pFirstBlock;
while (iBlockIndex > 0)
{
pBlock = pBlock->pNextBlock
}
return pBlock[iElementIndex]->pData;
}
}
Ответов: 5446
Рейтинг: 323
|
|||
nesco, я и говорил про перемещение между кластерами. Внутри кластера у тебя линейная адресация: начало_блока+индекс*размер_элемента. Размер блока у тебя фиксированный, так что понять, в каком блоке лежит нужный элемент легко. Я-то речь веду о том, как найти начало нужного блока. В твоём методе нельзя сразу узнать адрес k-го блока, надо сначала все предыдущие пройти (цепочка же). Ну вот псевдокод :
|
|||
карма: 1 |
|