Documente Academic
Documente Profesional
Documente Cultură
struct elemento{
tipo_dato dato;
struct elemento *sgt;
};
typedef struct elemento nodo;
nodo * L
/*Cabeza de la lista*/
2.CREAR LISTA
void crearLista (nodo *cabeza)
{
cabeza=null;
}
/*Llamada desde el main() */
crearLista(L);
f(f(
struct elemento
{
tipo_dato dato;
struct elemento* sgt;
struct elemento* ant;
};
typedef struct elemento nodo;
2.INICIALIZACIN O CREACIN
LISTAS CIRCULARES
1.DECLARACIN DE UN NODO
typedef tipo_dato Dato;
struct elemento
{
Dato dato;
struct elemento *sgt;
};
typedef struct elemento Nodo;
2.CREAR UN NODO
3.INSERTAR UN NODO
void insertarCircular (Nodo ** lc,tipo_dato entrada)
{
Nodo * nuevo;
nuevo=crearNodo(entrada)
if (*cabeza != NULL)
{
nuevo-->sgt=(*cabeza)-->sgt
(*cabeza)-->sgt=nuevo;
}
*cabeza=nuevo;
}
5.OTRAS OPERACIONES
5.1.Buscar
5.2.Mostrar
5.1.Buscar
5.2.MOSTRAR LISTA
PILAS
Podemos implementarlas con;
A ) ARRAYS
B )LISTAS ENLAZADAS
A ) ARRAYS
Las operaciones que definimos en una pila para manipular su contenido son:
1.
2.
3.
4.
5.
6.
7.
1.DECLARACIN DE LA PILA
4.CIMA
Devuelve el elemento que se encuentra en la cima
tipoDato cima (Pila pila)
{
if(pilaVacia(pila))
{
puts(Error de ejecucin, pila vacia);
exit(1);
}
return pila.listaPila[pila.cima];
}
5.PILA VACIA
int pila Vacia(pila pila)
{
return pila.cima==1;
}
6.PILA LLENA.
int pilaLlena(pila pila)
{
return pila.cima==-1;
}
7.LIMPIAR PILA
void limpiarPila(pila *pila)
{
pila-->cima=-1;
}
8.CREAR PILA
void crearPila(pila *pila)
{
pila-->cima=-1;
}
B )LISTAS ENLAZADAS
1.
2.
3.
4.
5.
6.
0.DECLARACIN DE LA PILA
struct elemento
{
tipoDato dato;
struct elemento *sig;
}
typedef struct elemento nodo;
5.QUITAR
tipoDato quitar(nodo **pila)
{
tipoDato salida;
salida=cima(*pila);
suprimir(pila);
return salida;
}
6.VACIADO DE LA PILA
void limpiarPila(nodo **pila)
{
while(!pilaVacia(*pila));
{
suprimir(pila);
}
}
7.CIMA
tipoDato cima(nodo* pila)
{
if(pilaVacia(pila))
{
puts(Error de ejecucin, pila vacia);
exit(1);
}
return pila-->dato;
}
COLAS
Tipos de implementaciones
A) Implementacin con Arrays
B) Implementacion con Arrays circulares
A) Implementacin con Arrays
Se implementaran las siguientes funciones y estructuras
1. Declaracin de la cola
2. Creacin de una cola vacia
3. Insertar un elemento
4. Quitar un elemento
5. Comprobar si la cola esta vacia
6. Comprobar si la cola esta llena.
7. Devolver el primer elemento de la cola.
1.DECLARACIN DE LA COLA
#define MAXTAMQ <nmero de elementos>
struct elemento
{
tipoDato listaCola[MAXTAMQ];
int frente,final;
};
typedef struct elemento cola;
2.CREAR COLA
void crearCola (cola* cola)
{
cola-->frente=0;
cola-->final=-1;
}
3.INSERTAR
void insertar (cola* cola, tipoDato dato)
{
if(colaLlena(*cola))
{
puts(Desbordamiento. Cola llena);
exit(1);
}
cola-->final ++;
cola-->listaCola[cola-->final]=dato;
}
4. QUITAR
tipoDato quitar (cola* cola)
{
tipoDato dato;
if(colaVacia(*cola))
{
puts(Se intenta sacar un elemento de una cola vacia);
exit(1);
}
dato=cola-->listaCola[cola-->frente];
cola-->frente ++;
return dato;
}
5.COLA VACIA
int colaVacia (Cola cola)
{
return cola.final<cola.frente;
}
6.COLA LLENA
int colaLlena (Cola cola)
{
return cola.final==MAXTAMQ -1;
}
7.FRENTE
tipoDato frente (Cola cola)
{
if( colaVacia (cola))
{
puts (Error de ejecucion, cola vacia);
exits (1);
}
return cola.listaCola[cola.frente];
}
FICHEROS EN C
1.TIPOS DE FICHEROS.
3.PROCESAMIENTO DE ARCHIVOS
while (!feof(ptr))
{
//codigo
}
fclose(ptr);
2. getc() y putc()
i) getc()
Si llegamos al final del archivo devuelve eof.Para leer un archivo de texto hasta el final usamos
do{
c=getc(fptr);
}while (c!=EOF)
ii) putc(car,fptr)
Escribe un carcter en un archivo
ii)fputs(cadena,puntero a archivo)
Escribe una cadena en el archivo.
fprintf(puntero_archivo,cadenea_control,cadena_texto);
fscanf(puntero_archivo,cadena_control,&variabl
ii)fread() y fwrite()
Se emplea en archivos sin formato(?).Se suele emplear cuando queremos leer y escribir el bloque
entero y no los miembros.
fread(&variable_tipo_registro, tamao_bloque,nmero_bloques,puntero_archivo)
fwrite(&variable_tipo_registro,tamao_bloque,nmero_bloques,puntero_archivo)
fread(&variable,sizeof(tipo_registro),1,fptr)
fwrite(&varaible,sizeof(tipo_registro),1,fptr)
QUICKSORT
INTERCAMBIA
RECONSTRUIR INDICE
LEER_CAMPO
LISTAR ORDENADOS LOS CAMPOS DEL INDICE
1) QUICKSORT
void Quicksort (File * fi, long inicio, long final)
{
long iz, de;
char mitad [10];
static char cad [10];
iz=inicio:;
de=final;
strcpy (mitad, leerCampo (fi,(iz+de)/2,cad));
do{
while( (strcmp(leerCampo(fi,iz,cad),mitad)<0) && (iz < de) )
iz ++;
while( (strcmp(mitad,leerCampo(fi,de,cad)<0) &&(de>iz) )
de ;
if (iz < de ) Intercambia (fi, iz, de);
if (i <=de)
{
iz ++;
de -;
}
} while(iz < de);
if (inicio < de ) Quicksort (fi, inicio, de);
if (iz< final ) Quicksort (fi, iz, final);
}
2 )INTERCAMBIA
3 ) RECONSTRUIR INDICE
void ReconstruirIndice (FILE *pf)
{
long n=0;
FILE * fi;
datos Ind;
/*Creo el archivo de indices*/
fi=fopen(indices.ind,w+b);
/*Abro el archivo con los datos*/
pf=fopen(Archivos.dat, rb);
rewind(pf);
while(fread(®,sizeof(datos),1,pf))
{
strcpy(ind.CampoIndice,reg.CampoIndice);
ind.indice=n++;
/*escribo en el archivo de indices*/
if (fwrite (&ind,sizeof(indice),1,fi)==1)
{
printf(%s,registro grabado);
}
}
QuickSort(fi,0,n-1);
fclose(fi);
fclose(pf);
}
4) LEER CAMPO
char *leerCampo ( FILE *fi, long n, char * buf)
{
indice ind;
fseek (fi, n*sizeof(indice), SEEK_SET);
fread (&ind, sizeof (indice), 1, fi);
strcpy (buf, ind.CampoIndice);
return buf;
}
3.MEZCLAR
int mezclar(FILE *pf, FILE **aux)
{
char ultima[128];
char linea [2][128];
char anterior[2][128];
int entrada;
int tramos=0;
fgets(linea[0],128,aux[0]);
fgets(linea[1],128,aux[1]);
strcpy(ultima,);
strcpy(anterior[0],);
strcpy(anterior[1],);
while(!feof(aux[0]) && !feof(aux[1])
{
if(strcmp(linea[0],linea[1])<=0)
entrada=0;
else
entrada=1;
strcpy(anterior[entrada],linea[entrada])
fputs(linea[entrada],pf)
fgets(linea[entrada],128,aux[entrada]);
if(strcmp(anterior[entrada],linea[entrada])>0)
{
if(!entrada)
{
entrada=1;
else
entrada=0;
tramos ++;
do
{
strcpy(anterior[entrada],linea[entrada]);
fputs(linea[entrada],pf);
fgets(linea[entrada],128,aux[entrada]);
}while(!feof(aux[entrada &&
strcmp(anterior[entrada],linea[entrada])<=0);
}
}
if(!feof(aux[])) tramos ++;
while(!feof(aux[0]))
{
fputs(linea[0],pf)
fgets(linea[0],128,aux[0]);
}
if(!feof(aux[1])) tramos ++;
while(!feof(aux[1]))
{
fputs(linea[1],pf)
fgets(linea[1],128,aux[1]);
}
}
int main()
{
FILE *fichero;
/*abro el archivo*/
mezcla(fichero);
mostrar(fichero);
/*cerrar el fichero*/
}