home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
CataniaB
/
teach-act
/
testi-esami
/
labo-2.00
/
parte1.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-01-29
|
2KB
|
123 lines
/* Una possibile soluzione Esame di Laboratorio di Algoritmi febbraio 2000 */
#include <stdio.h>
#include <stdlib.h>
#define B 20
#define MAX 20
/* fornisco l'implementazione piu' semplice, che non richiede allocazione dinamica */
/* PROTOTIPI */
int h(int x);
int h1(int x, int n);
void empty(int * tab);
void insert(int n, int * tab);
void print(int * tab);
int member(int n,int *tab);
/* MAIN */
main()
{
FILE * fp;
char nome[MAX];
int n;
int tab[B];
/* svuoto la tabella */
empty(tab);
/* leggo il nome del file */
printf("Fornisci il nome del file: ");
scanf("%s", nome);
/* apro il file in lettura */
fp = fopen(nome,"r");
/* carico i dati nella tabella */
while (fscanf(fp,"%d",&n) && n != -2)
insert(n,tab);
/* stampo la tabella */
print(tab);
}
/* FUNZIONI */
int h(int x)
{
return x % B;
}
int h1(int x, int n)
{
return (h(x) + n) % B;
}
void empty(int * tab)
{
int i;
for (i=0;i<B;i++)
tab[i] = 0;
}
int member (int n,int * tab)
{
int b,m=0;
b = h1(n,m);
while (m<B && tab[b] != 0)
{if (tab[b] == n) return 1;
m++;
b = h1(n,m);
}
return 0;
}
void insert(int n,int * tab)
{
int b,m=0;
if (!(member(n,tab)))
{
b = h1(n,m);
while (m<B && tab[b] != 0 && tab[b] != -1)
{
m++;
b = h1(n,m);
}
if ( m < B ) tab[b] = n;
}
}
void print(int * tab)
{
int i;
for (i=0;i<B;i++)
{
if (tab[i] != 0 && tab[i] != -1)
printf("%d: %d\n",i,tab[i]);
else
printf("%d: \n",i);
}
}