Dev - C++ - Problema con Codigo Cola Dinamica y Estructuras, ingresar nombre y edad a nodos en cola

 
Vista:
sin imagen de perfil
Val: 60
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con Codigo Cola Dinamica y Estructuras, ingresar nombre y edad a nodos en cola

Publicado por Patricio (25 intervenciones) el 08/04/2019 03:49:40
Estoy tratando de realizar el siguiente codigo pero no entiendo porque me esta dando error.
Gracias por la ayuda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define N 20
 
typedef struct persona{
    char nombre[N];
    int edad;
};
 
typedef struct nodo {
    struct persona nueva_persona;
    struct nodo *sig;
};
 
struct nodo *raiz=NULL;
struct nodo *ultimo=NULL;
 
int vacia()
{
    if (raiz == NULL)
        return 1;
    else
        return 0;
}
 
void insertar(struct persona ins_p)
{
	struct nodo *nuevo = malloc(sizeof(struct nodo));
    nuevo->nueva_persona = ins_p;
    nuevo->sig=NULL;
    if (vacia())
    {
        raiz = nuevo;
        ultimo = nuevo;
    }
    else
    {
        ultimo->sig = nuevo;
        ultimo = nuevo;
    }
}
 
char extraer()
{
    if (!vacia())
    {
        struct persona ext_per;
		ext_per = raiz->nueva_persona;
        struct nodo *primero = raiz;
 
        if (raiz == ultimo)
        {
            raiz = NULL;
            ultimo = NULL;
        }
        else
        {
        	primero = raiz;
            raiz = raiz->sig;
        }
        free(primero);
        return ext_per;
    }
    else
        return -1;
}
 
void imprimir()
{
    struct nodo *recorre = raiz;
    printf("\n\t Listado de todos las personas que restan en la cola.\n");
    while (recorre != NULL)
    {
        printf("\n\t Nombre: %s y Edad: %d  ", recorre->nueva_persona.nombre,recorre->nueva_persona.edad);
        recorre = recorre->sig;
    }
    printf("\n");
}
 
int main()
{
	printf ("\n\t Lista tipo cola en Memoria Dinamica ");
    insertar('Pedro',19);
    insertar('Trinidad',15);
    insertar('Gerg',21);
    insertar('Josefa',14);
    imprimir();
    extraer();//quito la primera persona que entro
    imprimir();//imprimo la nueva lista, Pedro ya no esta
 
    getch();
 
    return 0;
}
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
sin imagen de perfil
Val: 60
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con Codigo Cola Dinamica y Estructuras, ingresar nombre y edad a nodos en cola

Publicado por Patricio (25 intervenciones) el 08/04/2019 05:19:58
Bueno, aca intente cambiar un poco las cosas, pero mi programa aun esta incompleto.
Solo logre que funcionara con chars en vez de char[ ] y el programa de nombres solo me acepta caracteres individuales.
Como puedo modificar mi programa para que acepte nombres completos??
De ser posible me gustaria implementar el codigo de struct persona.

1
2
3
4
typedef struct persona{
	char nombre[30];
    int edad;
}

Como modifico el siguiente codigo para que acepte nombres completos?? Como insert("Patricio Fernandez",24); en vez de insert('P',24);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
 
 
typedef struct nodo {
	char nombre;
    int edad;
    struct nodo *sig;
};
 
struct nodo *raiz=NULL;
struct nodo *ultimo=NULL;
 
int vacia()
{
    if (raiz == NULL)
        return 1;
    else
        return 0;
}
 
void insertar(char x, int z)
{
	struct nodo *nuevo;
    nuevo=(struct nodo*)malloc(sizeof(struct nodo));
 
    nuevo->nombre=x;
    nuevo->edad=z;
    nuevo->sig=NULL;
    if (vacia())
    {
        raiz = nuevo;
        ultimo = nuevo;
    }
    else
    {
        ultimo->sig = nuevo;
        ultimo = nuevo;
    }
}
 
int extraer()
{
    if (!vacia())
    {
        int informacion = raiz->edad;
        int llamado = raiz->nombre;
        struct nodo *primero = raiz;
        if (raiz == ultimo)
        {
            raiz = NULL;
            ultimo = NULL;
        }
        else
        {
        	primero = raiz;
            raiz = raiz->sig;
        }
        free(primero);
        return llamado;
    }
    else
        return -1;
}
 
 
void imprimir()
{
    struct nodo *recorre = raiz;
    printf("\n\t Listado de todos los elementos que restan en la cola.\n");
    while (recorre != NULL)
    {
        printf("\n\t Nombre>%c  : Edad>%i  ", recorre->nombre,recorre->edad);
        recorre = recorre->sig;
    }
    printf("\n");
}
 
void imprimir_18()
{
    struct nodo *recorre = raiz;
    printf("\n\t Listado de las personas mayores a 18");
    while (recorre != NULL)
    {
    	if(recorre->edad>18){
        printf("\n\t Nombre>%c  : Edad>%i  ", recorre->nombre,recorre->edad);
        recorre = recorre->sig;
    	}
    	else{
    		recorre = recorre->sig;
    	}
 
    }
    printf("\n");
}
 
int main()
{
	insertar('A',19);
	insertar('B',18);
	insertar('C',17);
	insertar('D',14);
	insertar('E',22);
	insertar('F',29);
    imprimir();
    imprimir_18();
    printf("Quito A");
    printf ("\n\n  Se imprime el dato del primer nodo de la cola --> %c : \n", extraer());
    imprimir();
    imprimir_18();
    printf("Quito B");
    extraer();//quito B
    imprimir();
    imprimir_18();
    getch();
 
    return 0;
}
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
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con Codigo Cola Dinamica y Estructuras, ingresar nombre y edad a nodos en cola

Publicado por Alfil (1444 intervenciones) el 08/04/2019 11:20:21
Hay que añadir la librería

1
#include <string.h>  /* para poder usar strcpy( nuevo->nombre, x ); */

El struct :

1
2
3
4
5
6
7
8
#define N 20
 
typedef struct nodo {
 
	char nombre[N];
    int edad;
    struct nodo *sig;
};


La función insertar(); no se puede hacer una asignación directa entre dos arrays ( entre dos strings en c++ si)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void insertar(char x[], int z)
{
	struct nodo *nuevo;
    nuevo=(struct nodo*)malloc(sizeof(struct nodo));
 
    strcpy( nuevo->nombre, x );  /* copia x en nombre */
    nuevo->edad = z;
    nuevo->sig = NULL;
    if (vacia())
    {
        raiz = nuevo;
        ultimo = nuevo;
    }
    else
    {
        ultimo->sig = nuevo;
        ultimo = nuevo;
    }
}

Las llamadas a insertar han de llevar dobles comillar al pasar de char a string.

1
2
3
4
5
6
insertar( "AAA" ,19);
	insertar("BBB",18);
	insertar("CCC",17);
	insertar("DDD",14);
	insertar("EEE",22);
	insertar("FFF",29);


y lo último que queda es en los printf combiar %c por %s para imprimir los nombres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar