Dev - C++ - Ayuda solo me imprime la pila y no la cola

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

Ayuda solo me imprime la pila y no la cola

Publicado por Char (20 intervenciones) el 25/10/2019 08:25:26
Hola tengo un problema en mi código es que en el main tengo el código de la pila y de la cola pero el problema es que solo me imprime la pila y no la cola y si cambio sus lugares (poner el código de la cola arriba de la pila, solo me imprime la cola) quería saber como resolver eso.

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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include<iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
struct Nodo{
	int dato;
	Nodo *siguiente;
};
 
//Prototipos de Funciones
void insertarCola(Nodo *&,Nodo *&,int);
bool cola_vacia(Nodo *);
void suprimirCola(Nodo *&,Nodo *&,int &);
 
typedef Nodo *ptrNodo;
 
void agregarPila( ptrNodo *ptrCima, int n );
void sacarPila( ptrNodo *ptrCima );
void imprimirPila( ptrNodo cursor );
 
int main(){
	ifstream in( "Pop.txt" );
    string s, t;
 
	int dato;
 
	Nodo *pila = NULL;
	Nodo *frente = NULL;
	Nodo *fin = NULL;
 
	while( !in.eof() ){
        getline( in, s, ',' );
        in >> dato;
        getline( in, t );  // leer el salto de línea del fichero
 
        if( s == "PUSH" ){
            agregarPila( &pila, dato );
            imprimirPila( pila );
        }else{
            sacarPila( &pila );
            imprimirPila( pila );
        }
    }
 
    in.close();
 
    while( !in.eof() ){
        getline( in, s, ',' );
        in >> dato;
        getline( in, t );  // leer el salto de línea del fichero
 
        if( s == "PUSH" ){
            insertarCola(frente,fin,dato);
        }else{
            suprimirCola(frente,fin,dato);
        }
 
    }
 
    cout<<"\nMostrando los elementos de la cola: ";
					while(frente != NULL){
						suprimirCola(frente,fin,dato);
						if(frente != NULL){
							cout<<dato<<" -> ";
						}
						else{
							cout<<dato<<"->";
						}
					}
					cout<<"NULL\n\n";
 
	in.close();
 
	return 0;
}
 
//Función para insertar elementos en la cola
void insertarCola(Nodo *&frente,Nodo *&fin,int n){
	Nodo *nuevo_nodo = new Nodo();
 
	nuevo_nodo->dato = n;
	nuevo_nodo->siguiente = NULL;
 
	if(cola_vacia(frente)){
		frente = nuevo_nodo;
	}
	else{
		fin->siguiente = nuevo_nodo;
	}
 
	fin = nuevo_nodo;
}
 
//Función para determinar si la cola está vacia
bool cola_vacia(Nodo *frente){
	return (frente == NULL)? true : false;
}
 
//Función para eliminar elementos de la cola
void suprimirCola(Nodo *&frente,Nodo *&fin,int &n){
	n = frente->dato;
	Nodo *aux = frente;
 
	if(frente == fin){
		frente = NULL;
		fin = NULL;
	}
	else{
		frente = frente->siguiente;
	}
	delete aux;
}
 
//Pila
 
void agregarPila( ptrNodo *ptrCima, int n ){
	ptrNodo ptrNuevo;
    ptrNuevo = new Nodo;
 
    if ( ptrNuevo != NULL ) {
        ptrNuevo->dato = n;
        ptrNuevo->siguiente = *ptrCima;
        *ptrCima = ptrNuevo;
    }
    cout << "\tSe agrego: " << n << endl;
}
 
void sacarPila( ptrNodo *ptrCima ){
    ptrNodo ptrTemp;
    int valorElim;
 
    if( ptrCima != NULL )  {
        ptrTemp = *ptrCima;
        valorElim = (*ptrCima)->dato;
        *ptrCima = (*ptrCima)->siguiente;
        delete(ptrTemp);
        cout << "\tSe elimino: " << valorElim << endl;
    }else
        cout << "\n\tLa Pila esta vacia" << endl;
}
 
void imprimirPila( ptrNodo cursor )
{
    if( cursor == NULL ) {
        cout << "\n\tLa pila esta vacia\n";
    }else{
        cout << "\tLa pila es: " ;
        while( cursor != NULL ) {
           cout << cursor->dato << "->";
            cursor = cursor->siguiente;
        }
        cout << "NULL\n\n";
    }
}
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
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++

Ayuda solo me imprime la pila y no la cola

Publicado por Alfil (1444 intervenciones) el 27/10/2019 06:31:54
Si te fijas, la función imprimirCola e imprimirPila son idénticas.

La cola:

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 <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
using namespace std;
 
 
struct Nodo{
	int dato;
	Nodo *siguiente;
};
 
typedef Nodo *ptrNodo;
 
 
void agregarCola( ptrNodo *ptrCabeza, ptrNodo *ptrTalon, int valor );
void sacarCola( ptrNodo *ptrCabeza, ptrNodo *ptrTalon );
int estaVacia( ptrNodo ptrCabeza );
void imprimirCola( ptrNodo cursor );
 
int main(){
 
    ifstream in( "Lista.txt" );
    string s, t;
	ptrNodo cabeza = NULL;
	ptrNodo talon = NULL;
	int dato;
 
    while( !in.eof() ){
        getline( in, s, ',' );
        in >> dato;
        getline( in, t );  // leerr el salto de línea del fichero
 
        if( s == "PUSH" ){
            agregarCola( &cabeza, &talon,  dato );
            imprimirCola( cabeza );
        } else {
            if( !estaVacia( cabeza ) ) {
                sacarCola( &cabeza, &talon );
                imprimirCola( cabeza );
            } else
                cout << "\n\tLa cola esta vacia" << endl;
        }
    }
 
	getch();
 
	return 0;
}
 
void agregarCola( ptrNodo *ptrCabeza, ptrNodo *ptrTalon, int valor )
{
	ptrNodo ptrNuevo;
 
    ptrNuevo = new Nodo;
 
    if ( ptrNuevo != NULL ) {
        ptrNuevo->dato = valor;
        ptrNuevo->siguiente = NULL;
 
        if ( estaVacia( *ptrCabeza ) ) {
            *ptrCabeza = ptrNuevo;
 
        } else {
            (*ptrTalon)->siguiente = ptrNuevo;
        }
 
        *ptrTalon = ptrNuevo;
        cout << "\tSe agrego: " << valor << endl;
 
    } else {
        cout << "\tNo se agrego " << valor << ", no hay memoria disponible" << endl;
 
    }
 
}
 
void sacarCola( ptrNodo *ptrCabeza, ptrNodo *ptrTalon )
{
    int valor;
    ptrNodo tempPtr;
 
    valor = (*ptrCabeza)->dato;
    tempPtr = *ptrCabeza;
    *ptrCabeza = (*ptrCabeza)->siguiente;
 
 
    if ( *ptrCabeza == NULL ) {
        *ptrTalon = NULL;
    }
 
    delete tempPtr;
 
    cout << "\tSe elimino: " << valor << endl;
}
 
int estaVacia( ptrNodo ptrCabeza )
{
    return ptrCabeza == NULL;
 
}
 
void imprimirCola( ptrNodo cursor )
{
    if( cursor == NULL ) {
        cout << "\n\tLa cola esta vacia\n";
    } else {
        cout << "\tLa cola es: " ;
 
        while( cursor != NULL ) {
            cout << cursor->dato << "->";
            cursor = cursor->siguiente;
        }
        cout << "NULL\n\n";
    }
 
    cout << endl;
}
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