void dyAddAt(DynamicArray* array, TYPE value, int position)
{
    assert(position <= array->size);
    dyAdd(array, value);
	int i;
    for (i = array->size - 1; i > position; i--)
    {
        dySwap(array, i, i - 1);
    }
}
Exemple #2
0
void testDyHeapGetMin(CuTest* test)
{
    const int n = 10;
    DynamicArray* heap = dyNew(1);
    Task* tasks = createTasks(n);
    for (int i = 0; i < n; i++)
    {
        dyAdd(heap, &tasks[i]);
    }
    CuAssertPtrNotNull(test, dyHeapGetMin(heap));
    CuAssertTrue(test, dyGet(heap, 0) == dyHeapGetMin(heap));
    shuffle(heap);
    CuAssertPtrNotNull(test, dyHeapGetMin(heap));
    CuAssertTrue(test, dyGet(heap, 0) == dyHeapGetMin(heap));
    free(tasks);
    dyDelete(heap);
}
Exemple #3
0
void testBuildHeap(CuTest* test)
{
    const int n = 100;
    Task* tasks = createTasks(n);
    DynamicArray* heap = dyNew(1);
    for (int i = 0; i < n; i++)
    {
        dyAdd(heap, &tasks[i]);
    }
    for (int i = 0; i < n; i++)
    {
        shuffle(heap);
        buildHeap(heap, taskCompare);
        CuAssertIntEquals(test, n, dySize(heap));
        assertHeapProperty(test, heap);
    }
    dyDelete(heap);
    free(tasks);
}
Exemple #4
0
void testDyHeapSort(CuTest* test)
{
    const int n = 100;
    struct Task* tasks = createTasks(n);
    DynamicArray* heap = dyNew(1);
    for (int i = 0; i < n; i++)
    {
        dyAdd(heap, &tasks[i]);
    }
    shuffle(heap);
    dyHeapSort(heap, taskCompare);
    CuAssertIntEquals(test, n, dySize(heap));
    for (int i = 0; i < n; i++)
    {
        CuAssertTrue(test, dyGet(heap, i) == &tasks[n - i - 1]);
    }
    free(tasks);
    dyDelete(heap);
}
/**
 * Adds an element to the heap.
 * @param heap
 * @param value  value to be added to heap.
 * @param compare  pointer to compare function.
 */
void dyHeapAdd(DynamicArray* heap, TYPE value, compareFunction compare)
{
    
//int pos = dySize(heap) - 1;

dyAdd(heap, value);
int pos = dySize(heap) - 1;
int parent;
while (pos > 0) {
    parent = (pos - 1) / 2;
    if(compare(dyGet(heap, pos), dyGet(heap, parent)) == -1){
        dySwap(heap, pos, parent);
        pos = parent;
    }

    else
        break;
}

}
Exemple #6
0
void testAdjustHeap(CuTest* test)
{
    const int n = 100;
    Task* tasks = createTasks(n);
    for (int j = 0; j < n; j++)
    {
        DynamicArray* heap = dyNew(1);
        for (int i = 0; i < n; i++)
        {
            dyAdd(heap, &tasks[i]);
        }
        for (int i = 0; i < n; i++)
        {
            dyPut(heap, &tasks[rand() % n], 0);
            adjustHeap(heap, dySize(heap) - 1, 0, taskCompare);
            assertHeapProperty(test, heap);
        }
        dyDelete(heap);
    }
    free(tasks);
}
void dyBagAdd(DynamicArray* bag, TYPE value)
{
    dyAdd(bag, value);
}
void dyStackPush(DynamicArray* stack, TYPE value)
{
    dyAdd(stack, value);
}
Exemple #9
-1
void testDyHeapRemoveMin(CuTest* test)
{
    const int n = 100;
    Task* tasks = createTasks(n);
    DynamicArray* heap = dyNew(1);
    for (int i = 0; i < n; i++)
    {
        dyAdd(heap, &tasks[i]);
    }
    for (int i = 0; i < n; i++)
    {
        CuAssertIntEquals(test, n - i, dySize(heap));
        CuAssertTrue(test, dyGet(heap, 0) == &tasks[i]);
        dyHeapRemoveMin(heap, taskCompare);
        assertHeapProperty(test, heap);
        CuAssertIntEquals(test, n - i - 1, dySize(heap));
    }
    dyDelete(heap);
    free(tasks);
}