Logo Studenta

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

¡Estudia con miles de materiales!

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