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-6.01
/
turno2
/
parte3.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-09-04
|
2KB
|
169 lines
/*PARODI SILVANO */
#include<stdio.h>
#include<stdlib.h>
/*STRUTTURE DATI*/
typedef struct cella *coda;
struct cella{
int info;
coda next;
};
/*PROTOTIPI*/
coda empty();
coda enqueue(coda s, int n);
coda dequeue(coda s,int *n);
coda dequeue_k(coda *s,int k);
void print(coda s);
/*MAIN*/
void main()
{
char nome[20];
FILE *fp=NULL;
coda lista, newcoda;
int numero, kappa;
lista = empty();
printf("\nInserire il nome del file: ");
scanf("%s",nome);
if (fp = fopen(nome, "r"))
{
while ((fscanf(fp,"%d",&numero)) && (numero != -1))
lista = enqueue ( lista, numero);
fclose(fp);
}
else printf("\nErrore lettura file");
printf("\nEcco la coda: ");
print (lista);
printf("\nInserire il valore di k: ");
scanf("%d", &kappa);
newcoda = dequeue_k(&lista,kappa);
printf("\n La nuova coda e': \n");
print(newcoda);
printf("\n La vecchia coda e': \n");
print(lista);
}
/*CORPO FUNZIONI*/
coda empty()
{
return NULL;
}
coda enqueue(coda s, int n)
{
coda aux;
if (s==NULL)
{
aux = (coda)malloc(sizeof(struct cella));
aux->info = n;
aux->next = NULL;
return aux;
}
else
{
aux = (coda)malloc(sizeof(struct cella));
aux->info = n;
aux->next = s;
return aux;
}
}
coda dequeue(coda s,int *n)
{
coda prec1,prec2 , corr;
if(s!=NULL)
{
prec2 = NULL;
prec1 = NULL;
corr = s;
while (corr != NULL)
{
prec2 = prec1;
prec1 = corr;
corr = corr -> next;
}
if ( prec2 == NULL )
{
*n = prec1->info;
free(prec1);
s = NULL;
return s;
}
else
{
*n = prec1->info;
prec2->next = NULL;
free(prec1);
return s;
}
}
else
{
*n = -1;
return s;
}
}
coda dequeue_k(coda *s,int k)
{
coda corr, nuovacoda = empty();
int i = 0, n, num;
corr = *s;
while (corr!= NULL)
{
i++; /*calcolo la lunghezza della lista*/
corr = corr-> next;
}
if (k > i) return NULL;
else
{
for (n = 0; n < k; n++)
{
*s = dequeue(*s, &num);
nuovacoda = enqueue(nuovacoda, num);
}
return nuovacoda;
}
}
void print(coda s)
{
printf("\n ");
while ( s != NULL)
{
printf(" %d ",s->info);
s = s -> next;
}
}