#include void menu(); //menu de opciones void addelem(int x); //a¤ade elementos en le void delelem(int x); //elimina elementos void seelist(int x,int y); //visualizando o buscando elemto/s void savelefile(); //grabando en fichero void getlefile(); //recuperando del fichero void text(char txt[100]); //mensajes interactivos internos void final(); //creditos, about, ... struct snum { int num; //reservando espacio para numero entero struct snum *next; //creando puntero (flecha) }*nue,*act,*ini,*fin; //creando punteros a usar en le FILE *lefile; //puntero para gestion de files main () { //funcion principal nue=act=ini=fin=NULL; //punteros a null para evitar errores menu(); //llamando al menu de opciones final(); //finalizando con about... } void menu() { char opc; int num; do { system("CLS"); _setcursortype(1); //cambiando el tipo de cursor textcolor(1); //cambiando color en letra textbackground(7); //cambiando color de fondo letra gotoxy(0,10); //posicionando cursor cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ0ÍXÍ»ÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº --> Listas enlazadas ºÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍ»ÛÛ");printf("\n"); cprintf("ÛÛº [1] º > Introducir un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [2] º > Eliminar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [3] º > Mostrar lista enlazada º | ºÛÛ");printf("\n"); cprintf("ÛÛº [4] º > Buscar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [5] º > Almacenar lista en file º | ºÛÛ");printf("\n"); cprintf("ÛÛº [6] º > Recuperar lista del file º | ºÛÛ");printf("\n"); cprintf("ÛÛº º º ºÛÛ");printf("\n"); cprintf("ÛÛº [*] º >> Salir del programa º | ºÛÛ");printf("\n"); cprintf("ÛÛÈÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍ͹ÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛº Introduce una opci¢n...[ ] ºÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); gotoxy(45,22); opc=getch(); //tratamiento de opciones posibles switch (opc) { case '1':{system("CLS");printf("\nNumero a introducir: ");scanf("%d",&num);addelem(num);break;} case '2':{system("CLS");printf("\nNumero a eliminar: ");scanf("%d",&num);delelem(num);break;} case '4':{system("CLS");printf("\nNumero a buscar: ");scanf("%d",&num);seelist(1,num);break;} case '3':{system("CLS");seelist(0,0);break;} case '5':{system("CLS");savelefile();break;} case '6':{system("CLS");getlefile();break;} case '*':{break;} default:{system("CLS");printf("\nIntroduce una opci¢n valida");getch();} } }while(opc!='*'); } void addelem(int x){ nue=(struct snum*)malloc(sizeof(struct snum)); //creamos espacio predefinido nue->num=x; //le metemos el numero nue->next=NULL; //que apunte a null if (act==NULL) {act=nue;} //lista vacia, pon num el primero else { if(nue->num<=act->num){nue->next=act;act=nue;} //si es menor poner antes else{ //si es mayor recorrer ini=fin=act; //algoritmo de recorrido secuencial while(nue->num>fin->num&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } ini->next=nue; nue->next=fin; } } text("Elemento a¤adido..."); } void delelem(int x) { if(act==NULL){text("La lista se encuentra vacia");return;} //no hay le if(act->num==x){ //si es el elemento 1, eliminalo ini=act; act=act->next; free(ini); } else { //si-no recorre y elimina ini=fin=act; while(fin->num!=x&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } if(fin==NULL){text("No se ha encontrado el elemento");return;}//no hubo num ini->next=fin->next; free(fin); } text("Elemento eliminado"); } void seelist(int x,int y){ //funcion que lista o busca en funcion de argumento int result=0; nue=act; while (nue!=NULL){ //recorriendo le if(x==0){printf("\nNumero:[%d]",nue->num);result=1;} //listando elementos if(x==1&&nue->num==y){printf("Numero encontrado: [%d]",nue->num);result=1;break;} nue=nue->next; } if(result==0){text("Numero no encontrado");} text("Fin del listado"); } void savelefile(){ nue=act; lefile=fopen("le-file.txt","w"); //abriendo file para kribir while(nue!=NULL){ printf("\nGrabando[%d]...",nue->num); fprintf(lefile,"\n%d",nue->num); //escribiendo en file sleep(1); //retardo de un seg nue=nue->next; } text("Grabaci¢n en fichero finalizada"); fclose(lefile); } void getlefile() { int var; nue=act=ini=fin=NULL; printf("\nObteniendo datos del fichero\n"); lefile=fopen("le-file.txt","r"); //modo lectura while(feof(lefile)==0){ fscanf(lefile,"%d",&var); //obteniendo datos printf("\n>>> Numero: %d",var); addelem(var); //re-insertandolos en le } fclose(lefile); text("Fin de lectura del fichero"); } void text(char txt[100]){ //funcion para mensajes automatizados _setcursortype(0); textbackground(1);textcolor(14);printf("\n"); cprintf(" MSG: >>> %50s ",txt);getch(); _setcursortype(2); } void final() { //funcion credit, about... system("CLS"); _setcursortype(0); textbackground(0); textcolor(11); printf("\n\n\n\n\n\n\n\n"); cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ "); printf("\n"); cprintf(" ÉÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͻÿ "); printf("\n"); cprintf(" º ²²²±±±°°° Listas enlazadas °°°±±±²²² º³³ "); printf("\n"); cprintf(" ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ³³ "); printf("\n"); cprintf(" º ¸2001 by Quasi ³ quasi@wanadoo.es º³³ "); printf("\n"); cprintf(" º www.ircorion.cjb.net ³ inet@wanadoo.es º³³ "); printf("\n"); cprintf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÁÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÁÙ "); printf("\n\n\n\n\n\n"); _setcursortype(0); sleep(2); system("CLS"); _setcursortype(2); exit(0); }