[ Foro de C++ ]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <conio.h>
#include <string.h>
struct dato{
char num[100];
int matricula;
int edad;
float promedio;
int sexo;
struct dato *sig; //puntero a la siguiente entrada
struct dato *ante; //puntero al registro anterior
}alumno;
struct dato *raizd; //puntero a la primera entrada de la lista
struct dato *ulti_dato; //puntero a la ultima entrada de la lista
struct dato *buscar(char *); //puntero a una funcion
void intro(void),buscar(void);
void listar(void);
void borrar(struct dato **,struct dato **);
void insertar(struct dato *i,struct dato **raizd, struct dato **ulti_dato);
void mostrar(struct dato *);
int menu (void);
main(){
raizd=ulti_dato=NULL; //inicializar los punteros
char OP;
do{
menu();
OP=toupper (getch ());
switch (OP){
case '1':intro();break;
case '2':borrar(&raizd,&ulti_dato);break;
case '3':listar();getch();break;
}
}while (OP!=27);
}
//seleccionar una operacion
int menu(void){
printf("\n1. Insertar un numero\n");
printf("2. Borrar un numero\n");
printf("3. Ver lista completa\n");
printf("4. Buscar Numero\n");
printf("\nopc: ");
}
//introducir elementos
void intro(void){
struct dato *p;
p=(struct dato *)malloc (sizeof(alumno)); //new(alumno)
fflush(stdin);
printf("\nintroduzca numero: "); gets(p->num);
printf("introduzca matricula: ");scanf(" %d",&p->matricula);
printf("introduzca edad: ");scanf(" %d",&p->edad);
printf("introduzca promedio: ");scanf(" %f",&p->promedio);
printf("hombre(1), mujer(0): ");scanf(" %d",&p->sexo);
insertar(p,&raizd,&ulti_dato);
}
//crea una lista doblemente enlazada ordenadamente
void insertar(struct dato *i,/*nuevo elemento*/struct dato **raizd,/*primer elemento de la lista*/struct dato **ulti_dato /*ultimo elemento de la lista*/){
struct dato *ant,*p;
if(*ulti_dato==NULL){ //primer elemento de la lista
i->sig=NULL;
i->ante=NULL;
*ulti_dato=i;
*raizd=i;
return;
}
p=*raizd; //principio de la lista
ant=NULL;
while (p){
if(strcmp(p->num,i->num)<=0){
ant=p;
p=p->sig;
}
else
if(p->ante){
p->ante=i;
i->sig=p;
i->ante=ant; //p->ante;
ant->sig=i; //p->ante=i;
return;
}else
i->sig=p; //nuevo primer elemento
i->ante=NULL;
p->ante=i;
*raizd=i;
return;*/
}
ant->sig=i; //ponerlo en el ulti_dato
i->sig=NULL;
i->ante=ant;
*ulti_dato=i;
return;
}
//elimina un elemento de la lista
void borrar(struct dato **raizd, struct dato **ulti_dato){
struct dato *p, *buscar(char *num);
char s[80];
fflush(stdin);
printf("\nintroduzca numero: ");
gets(s);
p=buscar(s);
if(p){
if(*raizd==p){
*raizd=p->sig;
if (*raizd)
(*raizd)->ante=NULL;
else
*ulti_dato=NULL;
}
else{
p->ante->sig=p->sig;
if (p!=*ulti_dato)
p->sig->ante= p->ante;
else
*ulti_dato=p->ante;
}
free(p); //devolver memoria al sistema
printf("elemento borrado\n");
}
}
//buscar una direccion
struct dato *buscar(char *num){
struct dato *p;
p=raizd;
while(p){
if(!strcmp(num,p->num))
return p;
p=p->sig; //obtener siguiente direccion
}
printf("numero no encontrado\n");
return NULL; //no encontrado
}
//mostrar la lista entera
void listar(void){
struct dato *p;
p=raizd;
if (!p){
printf("\n Lista Vacía\n");
return;
}
printf(" \nContenido de la lista\n");
printf("numero matricula edad promedio sexo");
while(p){
mostrar(p);
p=p->sig; //obtener siguiente direccion
}
printf("\n Fin de Lista\n");
}
//esta funcion imprime realmente los campos de cada direccion
void mostrar(struct dato *p){
printf("\n %s ",p->num);
printf(" %d ",p->matricula);
printf(" %d ",p->edad);
printf(" %.1f ",p->promedio);
printf(" %d ",p->sexo);
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <conio.h>
#include <string.h>
struct dato{
char num[5];
int matricula;
int edad;
float promedio;
int sexo;
struct dato *sig; //puntero a la siguiente entrada
struct dato *ante; //puntero al registro anterior
}alumno;
struct dato *raizd; //puntero a la primera entrada de la lista
struct dato *ulti_dato; //puntero a la ultima entrada de la lista
struct dato *buscar(char *); //puntero a una funcion
void intro(void),buscar(void);
void listar(void);
void borrar(struct dato **,struct dato **);
void insertar(struct dato *i,struct dato **raizd, struct dato **ulti_dato);
void mostrar(struct dato *);
int menu (void);
main(){
raizd=ulti_dato=NULL; //inicializar los punteros
char OP;
do{
menu();
OP=toupper (getch ());
switch (OP){
case '1':intro();break;
case '2':borrar(&raizd,&ulti_dato);break;
case '3':listar();getch();break;
case '4':buscar();getch();break; //encuentra un nombre
}
}while (OP!=27);
}
//seleccionar una operacion
int menu(void){
printf("\n1. introducir un nombre\n");
printf("2. borrar un nombre\n");
printf("3. listar el archivo\n");
printf("4. buscar\n");
printf("\nopc: ");
}
//introducir elementos
void intro(void){
struct dato *p;
p=(struct dato *)malloc (sizeof(alumno)); //new(alumno)
fflush(stdin);
printf("\nintroduzca numero: "); gets(p->num);
printf("introduzca matricula: ");scanf(" %d",&p->matricula);
printf("introduzca edad: ");scanf(" %d",&p->edad);
printf("introduzca promedio: ");scanf(" %f",&p->promedio);
printf("hombre(1), mujer(0): ");scanf(" %d",&p->sexo);
insertar(p,&raizd,&ulti_dato);
}
//crea una lista doblemente enlazada ordenadamente
void insertar(struct dato *i,/*nuevo elemento*/struct dato **raizd,/*primer elemento de la lista*/struct dato **ulti_dato /*ultimo elemento de la lista*/){
struct dato *ant,*p;
if (*ulti_dato==NULL){ //primer elemento de la lista
i->sig=NULL;
i->ante=NULL;
*ulti_dato=i;
*raizd=i;
return;
}
p=*raizd; //principio de la lista
ant=NULL;
while (p){
if(strcmp(p->num,i->num)<=0){
ant=p;
p=p->sig;
}
else{
if(p->ante){
p->ante=i;
i->sig=p;
i->ante=ant; //p->ante;
ant->sig=i; //p->ante=i;
return;
}
i->sig=p; //nuevo primer elemento
i->ante=NULL;
p->ante=i;
*raizd=i;
return;
}
}
ant->sig=i; //ponerlo en el ulti_dato
i->sig=NULL;
i->ante=ant;
*ulti_dato=i;
}
//elimina un elemento de la lista
void borrar(struct dato **raizd, struct dato **ulti_dato){
struct dato *p, *buscar(char *num);
char s[80];
fflush(stdin);
printf("\nintroduzca numero: ");
gets(s);
p=buscar(s);
if(p){
if(*raizd==p){
*raizd=p->sig;
if (*raizd)
(*raizd)->ante=NULL;
else
*ulti_dato=NULL;
}
else{
p->ante->sig=p->sig;
if (p!=*ulti_dato)
p->sig->ante= p->ante;
else
*ulti_dato=p->ante;
}
free(p); //devolver memoria al sistema
printf("elemento borrado\n");
}
}
//buscar una direccion
struct dato *buscar(char *num){
struct dato *p;
p=raizd;
while(p){
if(!strcmp(num,p->num))
return p;
p=p->sig; //obtener siguiente direccion
}
printf("numero no encontrado\n");
return NULL; //no encontrado
}
//mostrar la lista entera
void listar(void){
struct dato *p;
p=raizd;
if (!p){
printf("\n Lista Vacía\n");
return;
}printf(" \nContenido de la lista\n");
printf("numero matricula edad promedio sexo");
while(p){
mostrar(p);
p=p->sig; //obtener siguiente direccion
}
printf("\n Fin de Lista\n");
}
//esta funcion imprime realmente los campos de cada direccion
void mostrar(struct dato *p){
printf("\n %s ",p->num);
printf(" %d ",p->matricula);
printf(" %d ",p->edad);
printf(" %.1f ",p->promedio);
printf(" %d \n",p->sexo);
}
//buscar un nombre en la lista
void buscar(void){
char num[10];
struct dato *p, *buscar(char *num);
fflush(stdin);
printf("\nintroduzca numero: ");
gets(num);
p=buscar(num);
if (!p)
printf("no encontrado\n");
else{
printf("numero matricula edad promedio sexo");
mostrar(p);
}
}
este codigo es el ultimo
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)