Beruflich Dokumente
Kultur Dokumente
#define LISTA_H_INCLUDED
#include "Nodo.h"
class lista
nodo*primero;
nodo*actual;
bool listaVacia(){
public lista()
if(listaVacia()){
else
#endif//lista de included
#ifndef LISTA_H_INCLUDED
#define LISTA_H_INCLUDED
class Nodo
private:
int valor;
Nodo*Siguiente;
public:
Nodo(int v, *sig=NULL){
};
Crear un sistema de ventas para una Tienda de
postres, la cual permita registrar y vender postres,
adicionalmente cada postre tiene m o n ingredientes.
Implementacion en C++:
Implementacion en C++:
1. /*
2. Autor: Joel Fernandez
3. Curso: Estructura de Datos
4. Ejercicio: IMPLEMENTACION DE UNA LISTA CIRCULAR
5. Descripcion: funciones inserta, elimina, busca y elimina
6. IDE: CodeBlocks
7. Pagina Web: http://codebotic.blogspot.com
8.
9. */
10.
11.
12. #include <iostream>
13. #include <cstdlib>
14. using namespace std;
15.
16. struct nodo{
17. int nro; //los datos seran de tipo entero
18. struct nodo *sgte; //puntero
19. };
20.
21. typedef struct nodo;//definimos a nodo como un tipo de variable
22. nodo *fin;//puntero que ira siempre al final de la lista
23. nodo *lista;//puntero que para nosotros apuntara a la cabeza de nuestra lista
24.
25. void menu1(); //declaramos las funciones a usar
26. void insertarInicio();
27. void insertarFinal();
28. void mostrar();
29. void buscarElemento();
30. void eliminarElemento();
31. void eliminarElementos();
32.
33. /* Funcion Principal
34. ---------------------------------------------------------------------*/
35.
36. int main(void)
37. {
38. lista = NULL;
39. int op; // opcion del menu
40.
41.
42. system("color 0a");
43.
44. do
45. {
46. menu1();
47. cin>>op;
48.
49. switch(op)
50. {
51. case 1:
52. insertarInicio();
53. break;
54.
55. case 2:
56. insertarFinal();
57. break;
58. case 3:
59. cout<<"\n\n Lista Circular \n\n";
60. mostrar();
61. break;
62.
63. case 4:
64. buscarElemento();
65. break;
66.
67. case 5:
68. eliminarElemento();
69. break;
70. case 6:
71. eliminarElementos();
72. break;
73.
74. default: cout<<"OPCION NO VALIDA...!!!";
75. break;
76.
77.
78. }
79.
80. cout<<endl<<endl;
81. system("pause"); system("cls");
82.
83. }while(op!=7);
84.
85. return 0;
86. }
87.
88. //////////////////////MOSTRAR MENU///////////////////////////////
89.
90. void menu1()
91. {
92. cout<<"\n\t\tLISTA ENLAZADA CIRCULAR\n\n";
93. cout<<" 1. INSERTAR AL INICIO "<<endl;
94. cout<<" 2. INSERTAR AL FINAL "<<endl;
95. cout<<" 3. REPORTAR LISTA "<<endl;
96. cout<<" 4. BUSCAR ELEMENTO "<<endl;
97. cout<<" 5. ELIMINAR ELEMENTO 'V' "<<endl;
98. cout<<" 6. ELIMINAR ELEMENTOS CON VALOR 'V' "<<endl;
99. cout<<" 7. SALIR "<<endl;
100.
101. cout<<"\n INGRESE OPCION: ";
102. }
103.
104. //////////////////////INSERTAR AL INICIO//////////////////////////
105.
106. void insertarInicio()
107. {
108. nodo *nuevo;
109. nuevo=new struct nodo;
110.
111. cout<<"\n***INSERTA AL INICIO*****\n";
112. cout<<"\nINGRESE DATO:";
113. cin>>nuevo->nro;
114. nuevo->sgte=NULL;
115.
116. if(lista==NULL)
117. {
118. cout<<"PRIMER ELEMENTO..!!!";
119. lista=nuevo;
120. lista->sgte=lista;
121. fin=nuevo;
122. }
123. else
124. {
125. nuevo->sgte = lista;
126. lista = nuevo;
127. fin->sgte = lista;
128. }
129.
130. }
131. //////////////////INSERTAR AL FINAL/////////////////////
132. void insertarFinal()
133. {
134. nodo *nuevo;
135. nuevo=new struct nodo;
136. cout<<"\n***INSERTA AL INICIO*****\n";
137. cout<<"\nINGRESE DATO:";
138. cin>>nuevo->nro;
139. nuevo->sgte=NULL;
140.
141. if(lista==NULL)
142. {
143. cout<<"PRIMER ELEMENTO..!!!";
144. lista=nuevo;
145. lista->sgte=lista;
146. fin=nuevo;
147. }
148. else
149. {
150. fin->sgte = nuevo;
151. nuevo->sgte = lista;
152. fin = nuevo;
153. }
154. }
155. //////////////////MOSTRAR TODOS LOS DATOS////////////////////////
156. void mostrar()
157. { nodo *aux;
158. aux=lista;
159. int i=1;
160.
161. if(lista!=NULL)
162. {
163. do
164. { cout<<" "<<aux->nro;
165. aux = aux->sgte;
166. i++;
167. }while(aux!=lista);
168. }
169. else
170. cout<<"\n\n\tLista vacia...!"<<endl;
171.
172.
173. }
174. //////////////////BUSCAR ELEMENTO///////////////////////
175. void buscarElemento() //esta funcion muestra la posicion del primer dato
coincidente
176. //encontrado en la lista
177. {
178. nodo *aux;
179. int i = 1, valor , flag = 0;
180.
181. cout<<"\nINGRESE ELEMENTO A BUSCAR:";
182. cin>>valor;
183. if(lista !=NULL)
184. {
185. aux = lista;
186.
187. do
188. {
189. if(aux->nro == valor)
190. {
191. cout<<"\n\n Encontrado en posicion "<< i <<endl;
192. flag=1;
193. }
194. else
195. {
196. aux = aux->sgte;
197. i++;
198. }
199. }while(aux!=lista);
200.
201. if(flag==0) cout<<"\n\n\tNumero no econtrado..!"<<endl;
202.
203. }
204. else
205. cout<<"\n\n\tLista vacia...!"<<endl;
206.
207. }
208. ////////////////ELIMINAR ELEMENTO DETERMINADO//////////////////////
209. void eliminarElemento()
210. {
211. nodo *aux, *r, *q;
212. int i = 1, flag = 0,valor;
213.
214. cout<<"\n INGRESE ELEMENTO A ELIMINAR:";
215. cin>>valor;
216.
217. if(lista !=NULL)
218. {
219. aux = lista;
220.
221. do
222. {
223. if(aux->nro == valor)
224. {
225. if(aux==lista)//si es que el dato a eliminar es el primero
226. { r=lista;
227. lista=lista->sgte;
228. aux=aux->sgte;
229. fin->sgte=lista;
230. r->sgte=NULL;
231. if(fin->sgte==NULL)
232. {
233. lista==NULL;
234. aux==NULL;
235. delete(r);
236. cout<<"\nELEMENTO ELIMINADO...!!!\n";
237. return;
238. }
239. else
240. {
241. delete(r);
242. cout<<"\nELEMENTO ELIMINADO...!!!\n";
243. return;
244. }
245. }
246. else
247. {
248. if(aux==fin)//si es que el dato a eliminar es al que
apunta a fin
249. {
250. r=aux;
251. aux=aux->sgte;
252. q->sgte=aux;
253. fin=q;
254. r->sgte=NULL;
255. delete(r);
256. cout<<"\nELEMENTO ELIMINADO...!!!\n";
257. return;
258. }
259. else
260. {
261. r=aux;
262. aux=aux->sgte;
263. q->sgte=aux;
264. r->sgte=NULL;
265. delete(r);
266. cout<<"\nELEMENTO ELIMINADO...!!!\n";
267. return;
268. }
269. }
270. flag=1;
271. }
272. else
273. { q=aux;
274. aux = aux->sgte;
275. i++;
276. }
277. }while(aux!=lista);
278.
279. if(flag==0)
280. cout<<"\n\n\tNumero no econtrado..!"<<endl;
281.
282.
283. }
284. else
285. cout<<"LISTA VACIA...!!!!";
286.
287.
288. }
289. //////////////////////ELIMINAR REPETIDOS/////////////////////
290. void eliminarElementos()
291. {
292. nodo *aux, *r, *q;
293. int flag = 0,valor;
294.
295. cout<<"\n DATO REPETIDO A ELIMINAR:";
296. cin>>valor;
297.
298. if(lista !=NULL)
299. { aux=lista;
300.
301. while(aux->nro==valor)//si los primeros elementos son repetidos
302. if(aux==lista) //esta funcion borra a estos
303. {
304. r=lista;
305. aux=lista->sgte;
306. lista=lista->sgte;
307. fin->sgte=lista;
308. r->sgte=NULL;
309. if(fin->sgte==NULL)
310. {
311. lista==NULL;
312. aux==NULL;
313. delete(r);
314. flag=1;
315. }
316. else
317. {
318. delete(r);
319. flag=1;
320. }
321. }
322. do
323. {
324. if(aux->nro == valor)
325. {
326. while(aux==lista)
327. {
328. r=lista;
329. aux=lista->sgte;
330. lista=lista->sgte;
331. fin->sgte=lista;
332. r->sgte=NULL;
333. if(fin->sgte==NULL)
334. {
335. lista==NULL;
336. aux==NULL;
337. delete(r);
338. }
339. else
340. delete(r);
341.
342. }
343.
344. if(aux==fin)//para si el elemento a borrar es apuntado por
*fin
345. {
346. r=aux;
347. aux=aux->sgte;
348. q->sgte=aux;
349. fin=q;
350. r->sgte=NULL;
351. delete(r);
352. }
353. else
354. {
355. r=aux;
356. aux=aux->sgte;
357. q->sgte=aux;
358. r->sgte=NULL;
359. delete(r);
360. }
361.
362. flag=1;
363. }
364. else
365. { q=aux;
366. aux = aux->sgte;
367. }
368. }while(aux!=lista);
369.
370. if(flag==0)
371. cout<<"\n\n\tNumero no econtrado..!"<<endl;
372. }
373. else
374. cout<<"LISTA VACIA...!!!!";
375. }