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; }
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; }
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; }
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; }
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; }