Dev - C++ - Ayuda con programa de listas en C++

 
Vista:

Ayuda con programa de listas en C++

Publicado por Nubia (1 intervención) el 23/11/2012 03:22:58
Buenas Noches,,

Estoy haciendo un programa de listas enlazadas que guarda nombres de empresas, pero el problema que me presenta es que en la salida no me muestra los nombres que ingreso sino un caracter extraño... y no entiendo por qué sucede esto...

El código que estoy haciendo es:

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

struct nodo
{
char info;
struct nodo *sig;
struct nodo *ant;
} *cab=NULL, *fin=NULL, *nuevo;


char vacia(void){
if(cab==NULL)
return 1;
else
return 0;
}

void generar_nodo(char dato)
{
nuevo=new nodo;
nuevo->info=dato;
nuevo->sig=NULL;
nuevo->ant=NULL;
fin=nuevo;
}

void mostrar()
{
struct nodo *p;
if(vacia()==1)
cout<<"Lista Vacia"<<endl;
else
{
p=cab;
while (p!=NULL)
{
cout<<p->info<<"\n";
p=p->sig;
}
cout<<endl;
}
}


void insertar_Cab(char dato)
{
struct nodo *p,*q;
generar_nodo(dato);
if(cab==NULL)
cab=nuevo;
else {
p=cab;
p->ant=nuevo;
nuevo->sig=p;
q=cab=nuevo;

while(p->sig!=NULL)
p=p->sig;
if(p->sig==NULL)
fin=p;
}
}

void extraer_Cab(){
struct nodo *p;

if(cab==NULL)
cout<<"Lista Vacia"<<endl;
else{
p=cab;
if(p->sig!=NULL)
{
cab=cab->sig;
cab->ant=NULL;
delete (p);
}
else
{
cab=fin=NULL;
delete p;
}
}
}

void menu()
{
int opc=-1;
char emp[30];
while (opc!=0)
{
system ("cls");
cout<<"0. Salir "<<endl;
cout<<"1. Mostrar"<<endl;
cout<<"2. Insertar Inicio "<<endl;
cout<<"3. Extraer por el Inicio "<<endl;
cin>>opc;
switch(opc)
{
case 0:
system ("cls");
cout<<"el programa ha finalizado "<<endl;
getch();
break;
case 1:
system ("cls");
cout<<"la lista es:"<<endl;
mostrar();
getch();
break;
case 2:
system ("cls");
cout<<"ingrese una Empresa "<<endl;
cin>>emp;
insertar_Cab(emp[30]);
cout<<"\n DATO INSERTADO "<<endl;
getch();
break;
case 3:
system ("cls");
extraer_Cab();
cout<<"\n DATO ELIMINADO "<<endl;
getch();
break;
}
}
}

int main(){
menu();
getch();
return 0;
}

Gracias por su ayuda! :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con programa de listas en C++

Publicado por Arturo (4 intervenciones) el 24/11/2012 03:51:14
Todo esta muy bien tu unico problema esta en los caracteres, ya que en la estructura tu declaras un unico char, es decir no declaras una cadena por lo tanto lo que le envias es unico caracter:
Copio tu codigo y agrego comentarios donde lo modifique:

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

struct nodo
{
char info[30]; //***convierto esto en cadena**//
struct nodo *sig;
struct nodo *ant;
} *cab=NULL, *fin=NULL, *nuevo;


char vacia(void){
if(cab==NULL)
return 1;
else
return 0;
}

void generar_nodo(char *dato) //***agrego puntero para indicar cadena**//
{
nuevo=new nodo;
strcpy(nuevo->info,dato); //***hago copia en forma de cadena**//
nuevo->sig=NULL;
nuevo->ant=NULL;
fin=nuevo;
}

void mostrar()
{
struct nodo *p;
if(vacia()==1)
cout<<"Lista Vacia"<<endl;
else
{
p=cab;
while (p!=NULL)
{
cout<<p->info<<"\n";
p=p->sig;
}
cout<<endl;
}
}


void insertar_Cab(char *dato) //***envio en forma de cadena**//

{
struct nodo *p,*q;
generar_nodo(dato); //***envio cadena mas no posicion**//

if(cab==NULL)
cab=nuevo;
else {
p=cab;
p->ant=nuevo;
nuevo->sig=p;
q=cab=nuevo;

while(p->sig!=NULL)
p=p->sig;
if(p->sig==NULL)
fin=p;
}
}

void extraer_Cab(){
struct nodo *p;

if(cab==NULL)
cout<<"Lista Vacia"<<endl;
else{
p=cab;
if(p->sig!=NULL)
{
cab=cab->sig;
cab->ant=NULL;
delete (p);
}
else
{
cab=fin=NULL;
delete p;
}
}
}

void menu()
{
int opc=-1;
char emp[30];
while (opc!=0)
{
system ("cls");
cout<<"0. Salir "<<endl;
cout<<"1. Mostrar"<<endl;
cout<<"2. Insertar Inicio "<<endl;
cout<<"3. Extraer por el Inicio "<<endl;
cin>>opc;
switch(opc)
{
case 0:
system ("cls");
cout<<"el programa ha finalizado "<<endl;
getch();
break;
case 1:
system ("cls");
cout<<"la lista es:"<<endl;
mostrar();
getch();
break;
case 2:
system ("cls");
cout<<"ingrese una Empresa "<<endl;
cin>>emp;
insertar_Cab(emp); //***envio cadena mas no posicion**//
cout<<"\n DATO INSERTADO "<<endl;
getch();
break;
case 3:
system ("cls");
extraer_Cab();
cout<<"\n DATO ELIMINADO "<<endl;
getch();
break;
}
}
}

int main(){
menu();
getch();
return 0;
}



Te Recomiendo compararlo con tu otro codigo,, ojo solo modifique donde estan los comentarios..
cualquier cosa me avisas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar