Professional Documents
Culture Documents
h>
#include <termios.h>
#define MAX 10000
////////////////////////funcion getch
static struct termios old, new;
void initTermios(int echo)
{
tcgetattr(0, &old);
new = old;
new.c_lflag &= ~ICANON;
new.c_lflag &= echo ? ECHO : ~ECHO;
tcsetattr(0, TCSANOW, &new);
}
/* restaura valores i/o*/
void resetTermios(void)
{
tcsetattr(0, TCSANOW, &old);
}
/*lee un caracter de acuerdo si es ocn o sin eco*/
char getch_(int echo)
{
char ch;
initTermios(echo);
ch = getchar();
resetTermios();
return ch;
}
/* lee un caracter sin eco */
char getch(void)
{
return getch_(0);
}
struct lista
{
char dato;
int siguiente;
};
/* lee un caracter con eco */
char getche(void)
{
return getch_(1);
}
void inicializar_libre(struct lista T[MAX],int libre[1])
{
int i;
for(i=0;i<MAX-1;i++)
T[i].siguiente=i+1;
T[i].siguiente=-1;
libre[0]=0;
}
while(aux>=0)
{
aux_1=aux;
aux=T[aux].siguiente;
}
T[P].siguiente=T[aux_1].siguiente;
T[aux_1].siguiente=P;
}
//while((c=getchar())!= '\n');
}
else printf("Error falta memoria\n");
}
void recorrer(struct lista T[MAX],int L[1])
{
int aux=L[0];
while(aux>=0)
{
//puts(T[aux].nombre);
printf("%c",T[aux].dato);
if((aux==0 && T[aux].siguiente==0)==1)break;
aux=T[aux].siguiente;
}
printf("\n");
}
int tamano_lista(struct lista T[MAX],int L[1])
{
int cont=0;
int aux=L[0];
while(aux>=0)
{
//puts(T[aux].nombre);
if((aux==0 && T[aux].siguiente==0)==1)break;
cont++;
aux=T[aux].siguiente;
}
return cont;
}
void comparar(struct lista T[MAX],int L[1],int H[1])
{int i;
int aux=L[0];
int aux_1=L[0];
int aux2=H[0];
int tamano_listaH;
int ocurrencias =0;
int contador=0;
int contador2=0;
int flag=0;
int contador3=0;
int posiciones[100]={-1};
tamano_listaH = tamano_lista(T,H);
while(aux>=0)
{
aux_1=aux;
{
while(aux2>=0 && aux_1>=0)
{ if(aux2==H[0])posiciones[contador]=aux_1;
if(T[aux_1].dato != T[aux2].dato)break;
else {aux2=T[aux2].siguiente;
aux_1=T[aux_1].siguiente;
}}
if(aux2<0){ocurrencias++;contador++;}
else posiciones[contador]= -1;
aux2=H[0];
aux=T[aux].siguiente;
}
int aux3=L[0];
while(aux3>=0)
{
//puts(T[aux].nombre);
if(aux3==posiciones[contador2])flag=1;
if(flag==1){ printf("\x1b[31m""%c""\x1b[0m",T[aux3].dato);contador3++;}
else
printf("%c",T[aux3].dato);
if(contador3==tamano_listaH){flag=0;contador3=0;contador2++;}
if((aux3==0 && T[aux3].siguiente==0)==1)break;
aux3=T[aux3].siguiente;
}
printf("\n");
printf("ocurrencias = %d\n",ocurrencias);
}
void eliminar(struct lista T[MAX],int libre[1],int L[1])
{
int aux=L[0];
while(aux>=0)
{
//puts(T[aux].nombre);
if(T[T[aux].siguiente].siguiente == -1)break;
if((aux==0 && T[aux].siguiente==0)==1)break;
aux=T[aux].siguiente;
}
T[T[aux].siguiente].siguiente=libre[0];
libre[0]=T[aux].siguiente;
T[aux].siguiente = -1;
int main(){
int i;
int libre[1];
int L[1]= {-1};
int H[1]= {-1};
H[0]=-1;
char caracter;
//L[0]=-1;
int aux;