elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con listas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con listas  (Leído 1,145 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Ayuda con listas
« en: 3 Septiembre 2018, 01:56 am »

Hola nuevamente, tengo 2 fallos en las funciones quitar_final() y quitar_nodo(); No se cual sea el problema algo debo estar haciendo mal o sera el sueño no se  :huh:

Aqui os dejo el codigo completo

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. typedef struct tnodo *pnodo;
  7. typedef struct tnodo{
  8. int dato;
  9. pnodo sig;
  10. };
  11. typedef struct tlista{
  12. pnodo inicio;
  13. pnodo final;
  14. };
  15.  
  16. void inicia(tlista &lista);
  17. void crear(pnodo &nuevo);
  18. void agregar_inicio(tlista &lista, pnodo nuevo);
  19. void agregar_final(tlista &lista, pnodo nuevo);
  20. void agregar_orden(tlista &lista, pnodo nuevo);
  21. pnodo quitar_inicio(tlista &lista);
  22. pnodo quitar_final(tlista &lista);
  23. pnodo quitar_nodo(tlista &lista, int valor);
  24. bool buscar_nodo(tlista lista,int valor);
  25. void mostrar(tlista lista);
  26.  
  27. int main()
  28. {
  29. tlista milista;
  30. pnodo nuevonodo, eliminado;
  31. int opcion, num;
  32. inicia(milista);
  33. do{
  34. system("cls");
  35. cout << "1. Iniciar lista" << endl;
  36. cout << "2. Agregar al inicio" << endl;
  37. cout << "3. Agregar al final" << endl;
  38. cout << "4. Agregar en orden" << endl;
  39. cout << "5. Quitar al inicio" << endl;
  40. cout << "6. Quitar al final" << endl;
  41. cout << "7. Quitar valor" << endl;
  42. cout << "8. Buscar valor" << endl;
  43. cout << "9. Mostrar lista" << endl;
  44. cout << "10. Salir" << endl;
  45. cin >> opcion;
  46. switch(opcion){
  47. case 1: inicia(milista); break;
  48. case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
  49. case 3: crear(nuevonodo); if(nuevonodo!=NULL){agregar_final(milista,nuevonodo);}; break;
  50. case 4: crear(nuevonodo); if(nuevonodo!=NULL){agregar_orden(milista,nuevonodo);}; break;
  51. case 5: eliminado=quitar_inicio(milista);
  52. if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
  53. else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
  54. case 6: eliminado=quitar_final(milista);
  55. if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
  56. else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
  57. case 7: cout << "Igrese valor a eliminar: "; cin >> num; eliminado=quitar_nodo(milista,num);
  58. if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}
  59. else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
  60. case 8: cout << "Ingrese valor buscado: "; cin >> num;
  61. if(buscar_nodo(milista,num)==true){cout << "VALOR ENCONTRADO" << endl;}
  62. else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
  63. case 9: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  64. case 10: cout << "FIN DEL  PROGRAMA" << endl; break;
  65. default: cout << "Opcion incorrecta" << endl;
  66. }
  67. system("pause");
  68. }while(opcion!=10);
  69. }
  70.  
  71. void inicia(tlista &lista)
  72. {
  73. lista.inicio=NULL;
  74. lista.final=NULL;
  75.  
  76. }
  77.  
  78. void crear(pnodo &nuevo)
  79. {
  80. nuevo=new tnodo;
  81. if(nuevo!=NULL){
  82. cout << "Ingrese valor: "; cin >> nuevo->dato;
  83. nuevo->sig=NULL;
  84. }
  85. else{
  86. cout << "MEMORIA INSUFICIENTE" << endl;
  87. }
  88. }
  89.  
  90. void agregar_inicio(tlista &lista, pnodo nuevo)
  91. {
  92. if(lista.inicio==NULL){
  93. lista.inicio=nuevo;
  94. lista.final=nuevo;
  95. }
  96. else{
  97. nuevo->sig=lista.inicio;
  98. lista.inicio=nuevo;
  99. }
  100. }
  101.  
  102. void agregar_final(tlista &lista, pnodo nuevo)
  103. {
  104. if(lista.inicio==NULL){
  105. lista.inicio=nuevo;
  106. lista.final=nuevo;
  107. }
  108. else{
  109. lista.final->sig=nuevo;
  110. lista.final=nuevo;
  111. }
  112. }
  113.  
  114. void agregar_orden(tlista &lista, pnodo nuevo)
  115. {
  116. pnodo i;
  117. if(lista.inicio==NULL){
  118. lista.inicio=nuevo;
  119. lista.final=nuevo;
  120. }
  121. else{
  122. if(nuevo->dato<lista.inicio->dato){
  123. nuevo->sig=lista.inicio;
  124. lista.inicio=nuevo;
  125. }
  126. else{
  127. if(nuevo->dato>lista.final->dato){
  128. lista.final->sig=nuevo;
  129. lista.final=nuevo;
  130. }
  131. else{
  132. for(i=lista.inicio;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig){
  133. nuevo->sig=i->sig;
  134. i->sig=nuevo;
  135. }
  136. }
  137. }
  138. }
  139. }
  140.  
  141. pnodo quitar_inicio(tlista &lista)
  142. {
  143. pnodo borrado;
  144. if(lista.inicio==NULL){
  145. borrado=NULL;
  146. }
  147. else{
  148. if(lista.inicio==lista.final){
  149. borrado=lista.inicio;
  150. lista.inicio=NULL;
  151. lista.final=NULL;
  152. }
  153. else{
  154. borrado=lista.inicio;
  155. lista.inicio=borrado->sig;
  156. borrado->sig=NULL;
  157. }
  158. }
  159. return borrado;
  160. }
  161.  
  162. pnodo quitar_final(tlista &lista) //ERROR
  163. {
  164. pnodo borrado, i;
  165. if(lista.inicio==NULL){
  166. borrado=NULL;
  167. }
  168. else{
  169. if(lista.inicio==lista.final){
  170. borrado=lista.inicio;
  171. lista.inicio=NULL;
  172. lista.final=NULL;
  173. }
  174. else{
  175. for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig);
  176. borrado=lista.final;
  177. lista.final->sig=NULL;
  178. }
  179. }
  180. return borrado;
  181. }
  182.  
  183. pnodo quitar_nodo(tlista &lista, int valor) //ERROR
  184. {
  185. pnodo borrado, i;
  186. if(lista.inicio==NULL){
  187. borrado=NULL;
  188. }
  189. else{
  190. if(lista.inicio->dato==valor){
  191. borrado=lista.inicio;
  192. if(lista.inicio==lista.final){
  193. lista.inicio=NULL;
  194. lista.final=NULL;
  195. }
  196. else{
  197. lista.inicio=NULL;
  198. borrado->sig=NULL;
  199. }
  200. }
  201. else{
  202. for(i=lista.inicio;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);
  203. if(i->sig!=NULL){
  204. borrado=NULL;
  205. }
  206. else{
  207. borrado=i->sig;
  208. borrado->sig=NULL;
  209. }
  210. }
  211. }
  212. return borrado;
  213. }
  214.  
  215. bool buscar_nodo(tlista lista,int valor)
  216. {
  217. pnodo i;
  218. bool encontrado=false;
  219. if(lista.inicio!=NULL){
  220. for(i=lista.inicio;i!=NULL && encontrado==false;i=i->sig){
  221. if(i->dato==valor){
  222. encontrado=true;
  223. }
  224. }
  225. }
  226. return encontrado;
  227. }
  228.  
  229. void mostrar(tlista lista)
  230. {
  231. pnodo i;
  232. if(lista.inicio!=NULL){
  233. for(i=lista.inicio;i!=NULL;i=i->sig){
  234. cout << "Nodo: " << i->dato << endl;
  235. }
  236. cout << endl;
  237. }
  238. else{
  239. cout << "LISTA VACIA" << endl;
  240. }
  241. }
  242.  


En línea

7w7
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con listas
« Respuesta #1 en: 3 Septiembre 2018, 11:12 am »

En quitar_final
Código:
for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig); // for sin efecto por el ; final
borrado=lista.final; // aun habiendo conseguido el dato en el for anterior aquí directamente apuntas a lista.final
lista.final->sig=NULL;


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Ayuda con listas
« Respuesta #2 en: 3 Septiembre 2018, 11:27 am »

Ahhh tenes razon, la solucion seria esta  ;-)

Código
  1. pnodo quitar_final(tlista &lista) //ERROR
  2. {
  3. pnodo borrado, i;
  4. if(lista.inicio==NULL){
  5. borrado=NULL;
  6. }
  7. else{
  8. if(lista.inicio==lista.final){
  9. borrado=lista.inicio;
  10. lista.inicio=NULL;
  11. lista.final=NULL;
  12. }
  13. else{
  14. for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig);
  15. borrado=lista.final;
  16. lista.final=i;
  17. lista.final->sig=NULL;
  18. }
  19. }
  20. return borrado;
  21. }

Me faltaria el quitar nodo segun un valor especifico  :huh:
En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con 2 LISTAS
Programación Visual Basic
forrestgump 0 1,288 Último mensaje 4 Junio 2008, 22:25 pm
por forrestgump
Uso de Listas: Subprograma que lea 2 listas y forme una.
Dudas Generales
hbenitez 2 3,300 Último mensaje 8 Agosto 2010, 20:11 pm
por hbenitez
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 5,145 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
ayuda en listas
Programación C/C++
josue_tux 1 1,802 Último mensaje 28 Junio 2011, 01:00 am
por leogtz
Ayuda con listas en c
Programación C/C++
thorniton 1 1,218 Último mensaje 10 Noviembre 2015, 20:44 pm
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines