Logo Studenta

Actividad de Aprendizaje 04 Aplicación de Pila y Cola - Fernando Cesar Sandoval Padilla

Vista previa del material en texto

UNIVERSIDAD DE GUADALAJARA 
Centro Universitario de Ciencias Exactas e Ingenierías 
 
Estructura de datos I 
Actividad de Aprendizaje 04. Aplicación de pila y cola 
 
 
 
 
 
 
Alumno: Sandoval Padilla Fernando Cesar 
Docente: Gutiérrez Hernández Alfredo 
Código: 215685409 
Sección: D12 
 
 
 
 
 
 
 
 
 14 de Septiembre de 2019 
Resumen personal: 
 
La implementación de este programa se realizo tomando en cuenta los ejemplos de 
los apuntes de la aplicación de la pila y la cola, además su realización fue bastante 
complicada por el simple hecho de no haber entendido bien el concepto de pila y 
cola, solo por esto fue necesario dar un repaso varias veces a lo apuntes y buscar 
ejemplos en internet, por otra parte la primordial o principal complicación fue el uso 
de los paréntesis para que al escribirlos en el programa se tomaran en cuenta para 
la conversión a notación posfija, por eso fue importante entender el acomodo que 
va llevando la pila, solo así se pudo obtener un resultado correcto. 
Este trabajo puede servirme a futuro para implementarlo en otros programas que 
requieran del mismo concepto. 
Código fuente: 
main.cpp 
1 #include <iostream> 
2 #include <windows.h> 
3 #include <cstdio> 
4 #include "Pila.h" 
5 using namespace std; 
6 int main() 
7 { 
8 int res = -1; 
9 int x = 0; 
10 int longitud = 0; 
11 char expresion[1024]; 
12 char result[1024]; 
13 Pila objectPila; 
14 objectPila.Inicializa(); 
15 do 
16 { 
17 system("cls"); 
18 cout<<"Ingrese la operacion en notacion infija: "; 
19 cin.ignore(); 
20 gets(expresion); 
21 longitud = strlen(expresion); 
22 for(int y = 0; y <= longitud; y++) 
23 { 
24 switch(expresion[y]) 
25 { 
26 case '(': 
27 objectPila.Push(expresion[y]); 
28 break; 
29 case ')': 
30 for(int z = objectPila.getLastPos(); z != -1; z--) 
31 { 
32 if(objectPila.Top() == '(') 
33 { 
34 objectPila.Pop(); 
35 z = -1; 
36 break; 
37 } 
38 else 
39 { 
40 res++; 
41 result[res] = objectPila.Top(); 
42 objectPila.Pop(); 
43 } 
44 } 
45 break; 
46 case '+': 
47 if(objectPila.Vacia() == 1) 
48 { 
49 objectPila.Push(expresion[y]); 
50 break; 
51 } 
52 if(objectPila.Top() == '(') 
53 { 
54 objectPila.Push(expresion[y]); 
55 break; 
56 } 
57 for(int z = objectPila.getLastPos(); z != -1; z--) 
58 { 
59 if(objectPila.Top() == '(') 
60 { 
61 objectPila.Pop(); 
62 z = -1; 
63 break; 
64 } 
65 else 
66 { 
67 res++; 
68 result[res] = objectPila.Top(); 
69 objectPila.Pop(); 
70 } 
71 } 
72 case '-': 
73 if(objectPila.Vacia() == 1) 
74 { 
75 objectPila.Push(expresion[y]); 
76 break; 
77 } 
78 if(objectPila.Top() == '(') 
79 { 
80 objectPila.Push(expresion[y]); 
81 break; 
82 } 
83 for(int z = objectPila.getLastPos(); z != -1; z--) 
84 { 
85 if(objectPila.Top() == '(') 
86 { 
87 objectPila.Pop(); 
88 z = -1; 
89 break; 
90 } 
91 else 
92 { 
93 res++; 
94 result[res] = objectPila.Top(); 
95 objectPila.Pop(); 
96 } 
97 } 
98 case '*': 
99 if(objectPila.Vacia() == 1) 
100 { 
101 objectPila.Push(expresion[y]); 
102 break; 
103 } 
104 if(objectPila.Top() == '(') 
105 { 
106 objectPila.Push(expresion[y]); 
107 break; 
108 } 
109 if(objectPila.Top() == '^' or objectPila.Top() == '*' or 
objectPila.Top() == '/') 
110 { 
111 res++; 
112 result[res] = objectPila.Top(); 
113 objectPila.Pop(); 
114 objectPila.Push(expresion[y]); 
115 } 
116 else 
117 { 
118 objectPila.Push(expresion[y]); 
119 } 
120 break; 
121 case '/': 
122 if(objectPila.Vacia() == 1) 
123 { 
124 objectPila.Push(expresion[y]); 
125 break; 
126 } 
127 if(objectPila.Top() == '(') 
128 { 
129 objectPila.Push(expresion[y]); 
130 break; 
131 } 
132 if(objectPila.Top() == '^' or objectPila.Top() == '*' or 
objectPila.Top() == '/') 
133 { 
134 res++; 
135 result[res] = objectPila.Top(); 
136 objectPila.Pop(); 
137 objectPila.Push(expresion[y]); 
138 } 
139 else 
140 { 
141 objectPila.Push(expresion[y]); 
142 } 
143 break; 
144 case '^': 
145 if(objectPila.Vacia() == 1) 
146 { 
147 objectPila.Push(expresion[y]); 
148 break; 
149 } 
150 if(objectPila.Top() == '(') 
151 { 
152 objectPila.Push(expresion[y]); 
153 break; 
154 } 
155 if(objectPila.Top() == '^') 
156 { 
157 res++; 
158 result[res] = objectPila.Top(); 
159 objectPila.Pop(); 
160 objectPila.Push(expresion[y]); 
161 } 
162 else 
163 { 
164 objectPila.Push(expresion[y]); 
165 } 
166 break; 
167 default: 
168 res++; 
169 result[res] = expresion[y]; 
170 break; 
171 } 
172 } 
173 for(int z = objectPila.getLastPos(); z != -1; z--) 
174 { 
175 res++; 
176 result[res] = objectPila.Top(); 
177 objectPila.Pop(); 
178 } 
179 cout<<"La conversion a notacion posfija es: "; 
180 for(int z = 0; z <= res; z++) 
181 cout<<result[z]; 
182 cout<<"\n"; 
183 system("pause"); 
184 res = -1; 
185 }while(x == 0); 
186 } 
Pila.h 
1 #ifndef PILA_H 
2 #define PILA_H 
3 #include <iostream> 
4 #define MAX 1000 
5 
6 
7 
8 class Pila 
9 { 
10 private: 
11 char valores[MAX]; 
12 int ultimo; 
13 public: 
14 void Inicializa(); 
15 int Vacia(); 
16 int Llena(); 
17 void Push(char); 
18 void Pop(); 
19 char Top(); 
20 int getLastPos(); 
21 }; 
22 
23 #endif // PILA_H 
Pila.cpp 
1 #include "Pila.h" 
2 void Pila::Inicializa() 
3 { 
4 ultimo = -1; 
5 } 
6 int Pila::Vacia() 
7 { 
8 if(ultimo == -1) 
9 return 1; 
10 else 
11 return 0; 
12 } 
13 int Pila::Llena() 
14 { 
15 if(ultimo == MAX - 1) 
16 return 1; 
17 else 
18 return 0; 
19 } 
20 void Pila::Push(char a) 
21 { 
22 ultimo = ultimo + 1; 
23 valores[ultimo] = a; 
24 } 
25 void Pila::Pop() 
26 { 
27 ultimo = ultimo - 1; 
28 } 
29 char Pila::Top() 
30 { 
31 return valores[ultimo]; 
32 } 
33 int Pila::getLastPos() 
34 { 
35 return ultimo; 
36 } 
 
 
 
 
Capturas de pantalla:

Otros materiales