#ifndef HARVATAULUKKO
#define HARVATAULUKKO 1

#include<stdio.h>
#include<stdlib.h>

/* Harvan taulukon alkioiden tietorakenteen määrittely */
typedef struct halkio
{
    struct halkio *next;   /* Seuraava alkio  */
    struct halkio *prev;   /* Edellinen alkio */
    int           value;   /* Alkion arvo     */
    unsigned long index;   /* Alkion indeksi  */
} Harva_Alkio;

typedef struct
{
    unsigned long itemcnt; /* Taulukon koko   */
    Harva_Alkio *head;     /* Taulukon alku   */
    Harva_Alkio *tail;     /* Taulukon loppu  */
} Harva_Taulukko;

/* Funktiot */

Harva_Taulukko *alusta_htaulu(void);
Harva_Alkio *varaa_alkio(void);
int alkio(Harva_Taulukko *ht,unsigned long index);
Harva_Taulukko *iterate(Harva_Taulukko *hta, Harva_Taulukko *htb, 
  Harva_Alkio* (*fptr)(const Harva_Alkio *,const Harva_Alkio *));
Harva_Alkio *summa(const Harva_Alkio *ha,const Harva_Alkio *hb);
Harva_Alkio *erotus(const Harva_Alkio *ha,const Harva_Alkio *hb);
void lisaa(Harva_Taulukko *ht,Harva_Alkio *ha);
void print(Harva_Taulukko *ht);
void vapauta(Harva_Taulukko *ht);

#endif

