Как удалить строчку в блочном списке?
Я вполне мог что-нибудь напутать, потому что функция не работает корректно! Если в текущем блоке остаются элементы (т.е. cnt > 1), то сдвинуть содержимое блока на одну позицию влево, начиная с последней заполненной ячейки, до позиции удаляемого элемента; уменьшить счетчик на единицу иначе // удаляется последний элемент исключить опустевший блок полностью, удалив узел в двусвязном списке, настроив указатели previous и next, где необходимо
struct record //запись с данными
{
float key; //ключ
vector<int> intData; //должен быть массивом
vector<char> charData; // должен быть массивом
float floatData; //инфа
};
struct block //блок
{
size_t cnt; //кол-во записей в блоке
record cells[blockSize]; //ячейки блока
block* prev = nullptr; //предыдущий элемент
block* next = nullptr; //следующий элемент
};
struct blockList //список
{
block* head = nullptr; //указатель на голову списка
block* tail = nullptr; //указатель на хвост списка
};
void blockList_delete_custom(blockList* l, size_t indexBlock, const size_t indexCell) //Удаление строчки
{
block* temp = l->head;
/*считаем блоки, не доходя до последнего.
Если это последний блок, проверяем не превышало значение indexBlock фактическому
количеству блоков. Если нет, тогда удаляем из массива записей этого блока переданные в функцию
номер блока->номер строчки, при условии, что indexCell < blockSize*/
while (indexBlock != 0 && temp != l->tail) // перемещаемся по блоклисту в поиске нужного юзерблока
{
temp = temp->next;
indexBlock--;
}