/* ksuurin.c */ #include /* ELEMENT on liukuluku */ float element_prio(ELEMENT x) { return ELEMENT_FLOAT(x); } ELEMENT kmax(LIST L, int k) { PRIQUEUE P; LIST_POSITION a; ELEMENT x; int i = 0; PRIQUEUE_CREATE(P, LIST_TYPE(L)); a = LIST_FIRST(L); while (a != LIST_EOL(L)) { x = LIST_RETRIEVE(L, a); PRIQUEUE_INSERT(P, x, element_prio(x)); i = i + 1; a = LIST_NEXT(L, a); if (i > k) PRIQUEUE_DELETEMIN(P); } x = PRIQUEUE_MIN(P); PRIQUEUE_FREE(P); return x; } /* kokeiluosio */ int main() { const int N = 10; LIST l; int i; FLOAT_LIST_CREATE(l); for (i = 1 ; i <= N ; i++) FLOAT_LIST_INSERT(l, LIST_EOL(l), (rand() % 100) / 10.0 ); printf("Lista:"); LIST_PRINT(l); printf("\n"); for (i = 1 ; i <= N ; i++ ) printf("%d:nneksi suurin alkio :%7.2f\n", i, ELEMENT_FLOAT(kmax(l, i))); LIST_FREE(l); exit(0); }