示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
文件: tree.c 项目: FooBarrior/IMCS
void fallDownDelete(TreePtr tree, FallDownBehave fb){
    TreeItemPtr item = fallDown(tree->root, fb);
    if(NULL == item) return;
    LSQ_DeleteElement(tree, item->key);
}
示例#5
0
extern void LSQ_DeleteFrontElement(LSQ_HandleT handle)
{
	IteratorT *iterator = (IteratorT *)LSQ_GetFrontElement(handle);
	LSQ_DeleteElement(handle, iterator->node->key);
	LSQ_DestroyIterator(iterator);
}