extern void LSQ_DeleteRearElement(LSQ_HandleT handle) { IteratorT *iterator = (IteratorT *)LSQ_GetPastRearElement(handle); LSQ_RewindOneElement(iterator); LSQ_DeleteElement(handle, iterator->node->key); LSQ_DestroyIterator(iterator); }
extern void LSQ_DeleteElement(LSQ_HandleT handle, LSQ_IntegerIndexT key) { AVLTreeT *tree = (AVLTreeT *)handle; TreeNodeT *node = NULL, *parent = NULL; IteratorT * iter = (IteratorT *)LSQ_GetElementByIndex(handle, key); int new_key; if (!LSQ_IsIteratorDereferencable(iter)) return; parent = iter->node->parent; if (iter->node->l_child == NULL && iter->node->r_child == NULL) replaceNode(tree, iter->node, NULL); else if (iter->node->l_child != NULL && iter->node->r_child != NULL) { node = successor(iter->node); new_key = node->key; iter->node->value = node->value; LSQ_DeleteElement(handle, node->key); iter->node->key = new_key; return; } else if (iter->node->l_child != NULL) replaceNode(tree, iter->node, iter->node->l_child); else if (iter->node->r_child != NULL) replaceNode(tree, iter->node, iter->node->r_child); free(iter->node); tree->size--; restoreBalance(tree, parent, BT_AFTER_DELETE); }
void LSQ_DestroySequence(LSQ_HandleT handle) { IteratorT* iter = NULL; HashTableDataT* container = NULL; assert(handle != LSQ_HandleInvalid); container = (HashTableDataT*)handle; while(LSQ_GetSize(handle) > 0) { iter = (IteratorT*)LSQ_GetFrontElement(handle); LSQ_DeleteElement(handle, iter->curNode->key); } free(container); }
void fallDownDelete(TreePtr tree, FallDownBehave fb){ TreeItemPtr item = fallDown(tree->root, fb); if(NULL == item) return; LSQ_DeleteElement(tree, item->key); }
extern void LSQ_DeleteFrontElement(LSQ_HandleT handle) { IteratorT *iterator = (IteratorT *)LSQ_GetFrontElement(handle); LSQ_DeleteElement(handle, iterator->node->key); LSQ_DestroyIterator(iterator); }