Beispiel #1
0
int main(int argc, char* argv[]){
    
    Lista l1=vacia(), l2=vacia();
    FILE *in1=fopen(*(argv+1),"r"), *in2=fopen(*(argv+2),"r"), *out=fopen(*(argv+3),"w");
    char pal1[40], *pal2; 
    
    while(fscanf(in1,"%s",pal1)>0){
        pal2=(char*)malloc(40);
        strcpy(pal2,pal1); 
        l1=cons(pal2,l1);
    }

    while(fscanf(in2,"%s",pal1)>0){
        pal2=(char*)malloc(40);
        strcpy(pal2,pal1); 
        l2=cons(pal2,l2);
    }


    implista(ordena(pega(l1,l2)),out);     
    printf("%d palabras en %s.\n",numelem(pega(l1,l2)),*(argv+2));
    
    fclose(in1);
    fclose(in2);
    fclose(out); 
  
    
     return 0;   
}
Beispiel #2
0
int main(){
    Arbin a1=cons(50,cons(25,vacio(),vacio()),cons(75,vacio(),vacio()));
    Arbin a2=cons(150,cons(125,vacio(),vacio()),cons(200,vacio(),vacio())); 
    Arbin a3;
      
    printf("El arbol prueba tiene %d datos.\n",numelem(a1));
    
    printf("El arbol prueba tiene %d datos.\n",numelem(a3=cons(100,a1,a2)));    

    puts("Inorder:");
    inorder(a3);
    puts("Preorder:");
    preorder(a3);
    puts("Postorder:");
    postorder(a3);


    
    return 0;   
}
Beispiel #3
0
int main(){
    
     Lista l1=cons('7',cons('8',cons('9',cons('a',cons('b',cons('c',vacia()))))));
     Lista l2=cons('1',cons('2',cons('3',cons('4',cons('5',cons('6',vacia()))))));
          
     printf("La lista l1 tiene %d elementos.\n",numelem(l1));
     puts("Los elementos de la lista l1 son: \n");
     implista(l1);
     puts("------------------------");
     printf("La lista [l1|l2] tiene %d elementos.\n",numelem(pega(l1,l2)));
     puts("Los elementos de la lista [l1|l2] invertida son:\n");
     implista(invierte(pega(l1,l2)));

     printf("Esta el num 3 en la lista 2?: ");
     estaen('3',l2)?puts("Si."):puts("No."); 
     printf("Esta el num 9 en la lista 2?: "); 
     estaen('9',l2)?puts("Si."):puts("No.");
	 
	 puts("------------------------");
	 printf("Lista ordenada que resulta de pegar l1 y l2 ( [l1|l2] ) es: \n");
	 implista(ordena(pega(l1,l2)));    
     return 0;
}
Beispiel #4
0
int
inzone(DN *dp, char *name, int namelen, int depth)
{
	int n;

	if(dp->name == nil)
		return 0;
	if(numelem(dp->name) != depth)
		return 0;
	n = strlen(dp->name);
	if(n < namelen)
		return 0;
	if(strcmp(name, dp->name + n - namelen) != 0)
		return 0;
	if(n > namelen && dp->name[n - namelen - 1] != '.')
		return 0;
	return 1;
}
Beispiel #5
0
static void
dnzone(DNSmsg *reqp, DNSmsg *repp, Request *req)
{
	DN *dp, *ndp;
	RR r, *rp;
	int h, depth, found, nlen;

	memset(repp, 0, sizeof(*repp));
	repp->id = reqp->id;
	repp->qd = reqp->qd;
	reqp->qd = reqp->qd->next;
	repp->qd->next = 0;
	repp->flags = Fauth | Fresp | Oquery;
	if(!norecursion)
		repp->flags |= Fcanrec;
	dp = repp->qd->owner;

	/* send the soa */
	repp->an = rrlookup(dp, Tsoa, NOneg);
	reply(1, repp, req);
	if(repp->an == 0)
		goto out;
	rrfreelist(repp->an);
	repp->an = nil;

	nlen = strlen(dp->name);

	/* construct a breadth-first search of the name space (hard with a hash) */
	repp->an = &r;
	for(depth = numelem(dp->name); ; depth++){
		found = 0;
		for(h = 0; h < HTLEN; h++)
			for(ndp = ht[h]; ndp; ndp = ndp->next)
				if(inzone(ndp, dp->name, nlen, depth)){
					for(rp = ndp->rr; rp; rp = rp->next){
						/*
						 * there shouldn't be negatives,
						 * but just in case.
						 * don't send any soa's,
						 * ns's are enough.
						 */
						if (rp->negative ||
						    rp->type == Tsoa)
							continue;
						r = *rp;
						r.next = 0;
						reply(1, repp, req);
					}
					found = 1;
				}
		if(!found)
			break;
	}

	/* resend the soa */
	repp->an = rrlookup(dp, Tsoa, NOneg);
	reply(1, repp, req);
	rrfreelist(repp->an);
	repp->an = nil;
out:
	rrfree(repp->qd);
	repp->qd = nil;
}