me gustaria  que  le echaran un vistazo  a este codigo <br>es que no lo tengo totalmente  optimizado  pricipalmente la funcion mostrar  solo me muestra wel primer  elemento de la lista <br>por favor  sugerencias<br>#include<iostream.h><br>
#include<stdio.h><br>#include<stdlib.h><br>#include<conio.h><br>#include<dos.h><br>#include<string.h><br><br><br>struct pila<br>{<br>char nombre[40];<br>int ced;<br>int edad;<br>int tel;<br>char sex[10];<br>
char eps[50];<br>char mail[50];<br>struct pila *sig;<br>}*cima=NULL,*p=NULL;<br>void menu();<br>void portada();<br>void insertar();<br>void extraer();<br>void visualizar ();<br>void main()<br>{<br>portada();<br>clrscr();<br>
textcolor(8);<br><br>menu();<br><br>}<br>void portada()<br><br>{<br>system("color 13");<br>gotoxy(10,2);cout<<"ESTRUCTURA DE DATOS"<<endl;<br>gotoxy(10,6);cout<<"TRABAJO COLABORATIVO NO 2"<<endl;<br>
gotoxy(10,9);cout<<"PROFESOR HERMES MOSQUERA"<<endl;<br>gotoxy(10,14);cout<<"Powered By YAIR JOSE DIAZ GONZALEZ"<<endl;<br>gotoxy(10,15);cout<<"UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA(UNAD)"<<endl;<br>
gotoxy(10,19);system("pause");<br>}<br>void insertar() // Funcion que inserta datos a la pila<br>{<br>char n;<br>struct pila *p;<br>p = (struct pila*) malloc(sizeof(struct pila)); // reservamos<br>// espacio para el nodo (dato, sig)<br>
clrscr();<br><br>if(cima==NULL)<br>{<br><br>do<br>  {<br>p->sig = NULL; // hacemos que el nuevo nodo apunte a NULL<br>cima = p; // Ahora el tope es el nuevo nodo<br>clrscr();<br>gotoxy(5,5);printf("Escriba el nombre: ");<br>
gotoxy(5,6) ;scanf("%s",p->nombre); <br>gotoxy(5,7);printf("Dame Edad: ");<br>gotoxy(5,8);scanf("%d",&p->edad);<br>gotoxy(5,9);printf("Dame su telefono: ");<br>gotoxy(5,10);scanf("%d",&p->tel);<br>
gotoxy(5,11);printf("Dame el No de  Cedula: ");<br>gotoxy(5,12);scanf("%d",&p->ced);<br>gotoxy(5,13);printf("Dame el sexo: ");<br>gotoxy(5,14);scanf("%s",&p->sex);<br>
gotoxy(5,15);printf("Afiliacion a EPS o ARS: ");<br>gotoxy(5,16);scanf("%s",&p->eps);<br>gotoxy(5,17);printf("Deme su Email: ");<br>gotoxy(5,18);scanf("%s",&p->mail);<br>
<br>gotoxy(5,21);cout<<"Para introducir otro paciente intro S/N"<<endl;<br>gotoxy(5,22);cin>>n;<br><br>}<br>while((n=='s')||(n=='S'));<br> menu();<br><br>return;<br>}<br><br>else// si no<br>
{<br><br><br>p->sig = cima; // hacemos que el nuevo nodo apunte al tope<br>cima = p; // ahora el tope es el nuevo nodo<br>}<br><br><br><br>}<br>void extraer()<br>{<br>if(cima == NULL)<br>{<br><br>printf("PILA VACIA\n");<br>
return;<br>}<br>struct pila *tmp; // temporal para almacenar la direccion del tope<br>tmp = cima; // guardamos en tmp la ubicacion del tope<br>cima = tmp->sig; // hacemos que el tope sea el anterior nodo ingresado<br>// sacamos el dato del nodo que estaba como tope<br>
printf("Nombre : %s\n", tmp->nombre);<br>printf("Edad : %d\n", tmp->ced);<br>printf("Edad : %d\n", tmp->edad);<br>printf("Edad : %d\n", tmp->tel);<br>printf("Nombre : %s\n", tmp->sex);<br>
printf("Nombre : %s\n", tmp->eps);<br>printf("Nombre : %s\n", tmp->mail);<br>free(tmp); // liberamos la memoria reservada para el tope<br>}<br>void visualizar (void)// funcion de la pila que le permite visualizar datos<br>
{<br>char n;<br>p = (struct pila*) malloc(sizeof(struct pila));<br>if (cima==NULL)//si c esta vacio<br>{<br>do<br>{<br>clrscr();<br>cout<<"NO HAY ELEMENTOS A LISTAR";//entoces mostrar esto<br>gotoxy(5,19);cout<<"Desea regresar al menu principal S/N"<<endl;<br>
gotoxy(5,20);cin>>n;<br>}<br>while((n=='n')||(n=='N'));<br>menu();<br>}<br><br>else// si no<br>{<br>clrscr();//limpiar pantalla<br>do<br>{<br>p=cima;//asignas inicio a p<br>while (p!=NULL)//mientras la p no este vacia<br>
{<br>clrscr();<br>printf("Nombre : %s\n", p->nombre);<br>printf("Edad : %d\n", p->ced);<br>printf("Edad : %d\n", p->edad);<br>printf("Edad : %d\n", p->tel);<br>printf("Nombre : %s\n", p->sex);<br>
printf("Nombre : %s\n",p->eps);<br>printf("Nombre : %s\n", p->mail);<br><br><br>p=p->sig;<br>free(cima);<br>gotoxy(5,19);cout<<"Desea regresar al menu principal S/N"<<endl;<br>
gotoxy(5,20);cin>>n;<br>}<br>}<br>while((n=='n')||(n=='N'));<br>menu();<br>}<br><br>getch();<br>}<br>void menu()<br>{<br>int opc=0;<br>do<br>{<br>clrscr();<br>gotoxy(12,3);cout<<"ASIGNADOR DE CITAS ";<br>
gotoxy(15,7);cout<<"\n\n\n";<br>gotoxy(15,8);cout<<"1. Insertar\n";<br>gotoxy(15,9);cout<<"2. Extraer\n";<br>gotoxy(15,10);cout<<"3. Visualizar\n";<br>gotoxy(15,11);cout<<"4. Salir\n\n";<br>
gotoxy(15,13);cout<<"Digite la opcion: ";<br>cin >>opc;<br>switch (opc)<br>{<br>case 1:<br>insertar();<br>break;<br>case 2:<br>extraer();<br>break;<br>case 3:<br>visualizar();<br>break;<br>case 4:<br>
exit(1);<br>}<br>getch();<br>}while (opc!=4);<br>}<br>