
/*
 * Ten modul zawiera pare definicji i funkcji do obslugi bardzo prostej listy.
 * Lista ta jest wykorzystana do pamietania danych wstawianych do hasza, w przypadku, gdy dane
 * te chca zajmowac to samo miejsce w tablicy. 
 * [c]piotao, 20060107
 */

#ifndef _HASHLST_
#define _HASHLST_

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

// definiujemy strukture odpowiedzialna za pamietanie wezla listy; jest to
// glowna struktura, ktora zajmuje sie pamietaniem danych, tutaj zapamietujemy
// liczby rzeczywiste, wiec danymi jest 'double' - liczby rzeczywiste podwojnej
// precyzji.

typedef struct Node {
  double x;    //  liczba pamietana w elementach listy
  struct Node* next;  //  wskaznik na nastepny element
} Node;

// struktura pamietajaca liste - w typowy sposob pamieta swoj rozmiar oraz
// dodatkowo indeks pod jaki zostala wstawiona dana.

typedef struct {
  int size;    // rozmiar listy
  int key;     // indeks listy
  Node *first; // glowa listy
} List;


// tworzenie nowego nodu listy
Node* newNode( double y ){
  Node* tmp = (Node*) malloc( sizeof(Node) );
  tmp->x = y;
  tmp->next = NULL;
  return tmp;
}

// tworzenie nowej listy (od razu z jednym elementem)
List* newList( int k, double y ){
  List* L  = (List*) malloc(sizeof(List));
  L->size  = 1;
  L->key   = k;
  L->first = newNode(y);
  return L;
}

// dodawanie kolejnego elementu do listy
void addList( List* L, double y ){
  Node* tmp = newNode(y);
  tmp->next = L->first;
  L->first = tmp;
  L->size++;
}

// usuwanie calej listy
List* delList(List* L){
  Node* tmp;
  if(L){
    while( L->first != NULL ){
			tmp = L->first;
			L->first = L->first->next;
			free(tmp);
			tmp = NULL;
    }
		free(L);
  }
	L = NULL;
	return L;
}

// sprawdzanie czy podany element znajduje sie na liscie, czy nie funkcja
// zwraca 1 jezeli element y zostal znaleziony a 0 w przeciwnym wypadku.
// funkcji tej uzywamy w HashSearch.
int searchList(List* L, double y){
	Node* tmp;
	int i = 0;
	tmp = L->first;
	while(tmp != NULL){
    if(tmp->x == y){
			printf("Znaleziono liczbe na pozycji: %i\n",i);
			return 1;
		}
		tmp = tmp->next;
		i++;
	}
	printf("Nie znaleziono liczby.\n");
	return 0;
}

#endif

