Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cEBH1994

#1
Programación C/C++ / Ayuda con Estructura!!
12 Junio 2017, 02:36 AM
Buenas, quisiera me ayudaran como es la estructura de eliminar un nodo al final de la lista en C++ si pueden pegar el código se los agradecería saludos.
#2
Logre un adelanto del código pero al tratar de correrlo me da el siguiente error quisiera me ayudaran el error que me indica es el siguiente.

collect2: error: ld returned 1 exit status


No se si me falta algo o tengo algo mal.

Código (cpp) [Seleccionar]
#include<iostream>
#include<stdlib.h>
using namespace std;

struct Registro{
int cedula;
string nombre;
string apellido;
int edad;
char sexo;
Registro *Rpersona;
};


void menu();
void insertarLista(Registro *&,int c, string n, string a, int e, char s);
void mostrarLista(Registro *);
void buscarLista(Registro *,int c);
void eliminarNodo(Registro *&,int c);
void eliminarLista(Registro *&,int &);

Registro *lista = NULL;

int main(){

menu();

return 0;
}

void menu(){
int opcion,c,e;
string n,a;
char s;


do{
cout<<"\t.:::Proyecto UBV:::.\n";
cout<<"1. Ingresar un Registro a la lista\n";
cout<<"2. Mostrar los Registros de la lista\n";
cout<<"3. Buscar un Registro en la lista\n";
cout<<"4. Eliminar un Registro de la lista\n";
cout<<"5. Dejar vacia la lista\n";
cout<<"6. Salir\n";
cout<<"Opcion: ";
cin>>opcion;

switch(opcion){
case 1: cout<<"\nIngrese un Numero de Cedula: ";
        cin>>c;
                    cout<<"\nIngrese el Nombre: ";
cin>>n;
cout<<"\nIngrese el Apellido: ";
cin>>a;
cout<<"\nIngrese la Edad: ";
cin>>e;
cout<<"\nIngrese el Sexo: ";
cin>>s;
insertarLista(lista,c,n,a,e,s);
cout<<"\n";
system("pause");
break;
case 2: mostrarLista(lista);
cout<<"\n";                         
system("pause");
break;
case 3: cout<<"\nIngrese el Numero de Cedula a Buscar en el Registro: ";
cin>>c;
buscarLista(lista,c);
cout<<"\n";
system("pause");
break;
case 4: cout<<"\nIngrese el Numero de Cedula a Eliminar del Registro: ";
cin>>c;
eliminarNodo(lista,c);
cout<<"\n";
system("pause");
break;
case 5:
while(lista != NULL){
eliminarLista(lista,c);
cout<<c <<" -> ";
}
cout<<"\n";
system("pause");
break;
}
system("cls");
}while(opcion != 6);
}

void insertarLista(Registro *&,int c, string n, string a, int e, char s){
Registro *nuevo_registro = new Registro();

nuevo_registro->cedula = c;
nuevo_registro->nombre = n;
nuevo_registro->apellido = a;
nuevo_registro->edad = e;
nuevo_registro->sexo = s;
Registro *aux1 = lista;
Registro *aux2;

while((aux1 != NULL) && (aux1->cedula < c), (aux1->nombre < n), (aux1->apellido < a), (aux1->edad < e), (aux1->sexo < s)){
aux2 = aux1;
aux1 = aux1->Rpersona;
}

if(lista == aux1){
lista = nuevo_registro;
}
else{
aux2->Rpersona = nuevo_registro;
}

nuevo_registro->Rpersona = aux1;

cout<<"\tPersona "<<c<<" insertada a la lista correctamente\n";
}

void mostrarLista(Registro *lista){
Registro *actual = new Registro();
actual = lista;

while(actual != NULL){
cout<<actual->cedula<<" -> ";
cout<<actual->nombre<<" -> ";
cout<<actual->apellido<<" -> ";
cout<<actual->edad<<" -> ";
cout<<actual->sexo<<" -> ";
actual = actual->Rpersona;
}
}

void buscarLista(Registro *lista,int c,string n,string a,int e,char s){
bool band = false;

Registro *actual = new Registro();
actual = lista;

while((actual != NULL) && (actual->cedula <= c), (actual->nombre <= n), (actual->apellido <= a),(actual->edad <= e), (actual->sexo <= s)){
if((actual->cedula == c), (actual->nombre == n), (actual->apellido == a), (actual->edad == e), (actual->sexo == s)){
band = true;
}
actual = actual->Rpersona;
}

if(band == true){
cout<<"Persona "<<n<<" SI a sido encontrado en lista\n";
}
else{
cout<<"Persona "<<n<<" NO a sido encontrado en la lista\n";
}
}

void eliminarNodo(Registro *&lista,int c,string n, string a, int e, char s){

if(lista != NULL){
Registro *aux_borrar;
Registro *anterior = NULL;

aux_borrar = lista;


while((aux_borrar != NULL) && (aux_borrar->cedula != c), (aux_borrar->nombre != n), (aux_borrar->apellido != a), (aux_borrar->edad != e), (aux_borrar->sexo != s)){
anterior = aux_borrar;
aux_borrar = aux_borrar->Rpersona;
}


if(aux_borrar == NULL){
cout<<"La persona no ha sido encontrado";
}

else if(anterior == NULL){
lista = lista->Rpersona;
delete aux_borrar;
}

else {
        anterior->Rpersona = aux_borrar->Rpersona;
delete aux_borrar;
}
}
}

       
        void eliminarLista(Registro *&lista,int &c, string &n, string &a,int &e, char &s){
    Registro *aux = lista;
    c = aux->cedula;
    n = aux->nombre;
    a = aux->apellido;
    e = aux->edad;
    s = aux->sexo;
    lista = aux->Rpersona;
    delete aux;
}

#3
Gracias por la ayuda intentare realizar el código con el material que me facilito saludos.
#4
Gracias por la pronta respuesta el detalle esta en que no se como iniciar el código porque no entiendo muy bien sobre listas enlazadas y tampoco de nodos llevo días tratando pero la verdad no se y me mandaron ese ejercicio de proyecto final y necesito hacerlo si no raspo la materia me gustaría su ayuda y explicación.
#5
Buenas amigos soy nuevo en el foro espero me saquen de este apuro necesito construir el siguiente código en C++ y no entiendo mucho sobre nodos.

A través de la realización de un algoritmo en C++, deben de construir una Lista enlazada la cual tendrá los siguientes datos a insertar:


 cedula (int)

 nombre (string)

 apellido (string)

 edad (int)

 sexo (char)

Se debe de validar que la cédula que se ingrese en la lista sea mayor a 999999 y menor e igual a 99999999; ej: (N > 999999 && N <= 99999999). Esto debido a que las cédula solo pueden tener 7 u 8 dígitos. Dicha lista al ejecutarse debe realizar los siguientes métodos:

1. Insertar un registro al inicio de la lista.

2. Insertar un registro al final de la lista.

3. Contar la cantidad de registros que tiene la lista.

4. Buscar cualquier registro a través de la cédula dentro de la lista.

5. Recorrer la lista y mostrar todos sus registros.

6. Eliminar un registro al final de la lista.

7. Eliminar un registro en cualquier posición de la lista.

8. Vaciar o Destruir la lista.

Dicho ejercicio de listas enlazadas debe cumplir con los siguientes parámetros exigibles:

1. Tener un menú dinámico, el cual permita ejecutar cualquier método sin cerrarse el

programa.

2. Validar que las cédulas que se estén ingresando cumplan con la validación.

3. Tener una opción para salir del programa.

Espero poder obtener su ayuda o aporte saludos.