Plan 9 from Bell Labs’s /usr/web/sources/contrib/steve/root/sys/src/cmd/seft/heap.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/*******************************************************************************
*
* Project:      seft (search engine for text)
*
* File:         heap.c
*
* Author:       Owen de Kretser (oldk@cs.mu.oz.au)
*
* Organisation: Dept. of CS&SE, University of Melbourne
*
* Date:         April 1999
*
* Purpose:      heap functions
*
*******************************************************************************/

/***** #includes **************************************************************/

#include "heap.h"


/*******************************************************************************
*
* Function: heap_remove
*
* Purpose:  remove top element from a heap
*
*******************************************************************************/

WORD*
heap_remove(WORD** heap, int* size)
{
    WORD* temp;

    temp = heap[1];
    heap[1] = heap[*size];

    (*size) -= 1;
    
    heap = heap_down(heap, 1, *size);

    return temp;
}

/*******************************************************************************
*
* Function: heap_down
*
* Purpose:  perform "downheap" operation on a heap
*
*******************************************************************************/

WORD**
heap_down(WORD** heap, int k, int N)
{
    WORD* temp;
    int	      j;
    int div = N/2;

    temp = heap[k];

    while(k <= div)
        {
    	j = k+k;
	    if(j < N && heap[j]->level < heap[j+1]->level)
	        j++;
        if(temp->level >= heap[j]->level)
	        break;

        heap[k] = heap[j];
        k = j; 
        }
    heap[k] = temp;

    return heap;
}


/*******************************************************************************
*
* Function: heap_insert
*
* Purpose:  insert an element into a heap
*
*******************************************************************************/

WORD**
heap_insert(WORD* new, WORD** heap, int i)
{
    heap[i] = new;

	heap = heap_up(heap, i);

	return heap;
}

/*******************************************************************************
*
* Function: heap_up
*
* Purpose:  perform "upheap" operation on a heap
*
*******************************************************************************/

WORD**
heap_up(WORD** heap, int k)
{
    WORD* v;

    /* make a copy of newly inserted item */
    v = heap[k];

    /* while parent is less than inserted value move parent down */
    while(heap[k/2]->level <= v->level)
        {
        heap[k] = heap[k/2];
	    k = k/2;
        }

    /* now place inserted value at correct place in heap */
    heap[k] = v;

    return heap;
}

/******************************************************************************/


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.