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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31
281  Programación / Programación C/C++ / Lista simple eliminar nodo segun un valor en: 15 Septiembre 2018, 06:13 am
Buenas no entiendo el comportamiento de este procedimiento y mas precisamente en el ciclo for

Código
  1. typedef struct tnodo *pnodo;//Estructura de la lista
  2. typedef struct tnodo{
  3. int dato;
  4. pnodo sig;
  5. };
  6.  
  7. pnodo quitar_nodo(pnodo &lista, int valor)//Metodo quitar nodo
  8. {
  9. pnodo borrado, i;
  10. if(lista==NULL){
  11. borrado=NULL;
  12. }
  13. else{
  14. if(lista->dato==valor){
  15. borrado=lista;
  16. lista=borrado->sig;
  17. borrado->sig=NULL;
  18. }
  19. else{
  20. for(i=lista;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);//De aqui en adelante no lo tengo bien en claro, se como lo hace pero el codigo me es incomprensible
  21. if(i->sig!=NULL){
  22. borrado=i->sig;
  23. i->sig=borrado->sig;
  24. borrado->sig=NULL;
  25. }
  26. else{
  27. borrado=NULL;
  28. }
  29. }
  30. }
  31. return borrado;
  32. }
Alguien que me lo explique en cristiano por favor?  ;-)
282  Programación / Programación C/C++ / Una pregunta acerca de mostrar listas circulares en: 13 Septiembre 2018, 06:26 am
Hola a todos, si bien esta es una de las formas mas facil de mostrar por pantalla los datos de una lista circular, pero yo queria saber si esto se puede realizar con un ciclo for porque la verdad no lo se  :huh:
Aqui abajo les dejo el procedimiento de mostrar_lista();
Código
  1. void mostrar(tlista lista)
  2. {
  3. pnodo i=lista.inicio;
  4. if(lista.inicio!=NULL){
  5. do{
  6. cout << "Nodo: " << i->dato << endl;
  7. i=i->sig;
  8. }while(i!=lista.inicio);
  9. }
  10. else{
  11. cout << "LISTA VACIA" << endl;
  12. }
  13. }
283  Programación / Programación C/C++ / Pequeña duda sobre palabra reservada new y espacios en memoria en: 13 Septiembre 2018, 03:52 am
Buenas a todos, queria saber mas que nada cuanta informacion en bytes puede guardar un espacio en memoria creada al usar un nuevo nodo con
Código
  1. new
, yo se que puede almacenarse un registro grandecito y bueno que pasaria si meto registros enormes mas que nada saber cuandos bytes es un espacio en memoria  :huh:
284  Programación / Programación C/C++ / Ciclos for en listas en: 10 Septiembre 2018, 20:08 pm
Alguien podria explicarme que es lo que hacen estos ciclos en las siguientes listas?

LISTAS SIMPLES
Código
  1. for(i=lista;!=NULL;i=i->sig);
Código
  1. for(i=lista.inicio;i->sig!=NULL;i=i->sig);
  2. i->sig=nuevo;
Código
  1. for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
El ultimo es de una lista circular simple con dos punteros al inicio y al final
285  Programación / Programación C/C++ / Invertir contenido de una lista enlazada simple con apuntadores en: 3 Septiembre 2018, 23:37 pm
Bueno la verdad no se porrque no me realiza el cambio para poder asi invertir la lista con el metodo burbuja y otra cosilla, si hay alguna otra forma de invertir la lista sin acudir a otra y respetando que es lista simplemente enlazada con 2 apuntadores estaria muy agradecid

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. typedef struct tnodo *pnodo;
  8. typedef struct tnodo{
  9. char dato;
  10. pnodo sig;
  11. };
  12. typedef struct tlista{
  13. pnodo inicio;
  14. pnodo final;
  15. };
  16. char matrix[4][4]={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}};
  17.  
  18. void inicia(tlista &lista);
  19. void agregar_final(tlista &lista, pnodo nuevo);
  20. void copiarContenido(tlista &lista);
  21. void invertirLista(tlista &lista);
  22. void mostrar(tlista lista);
  23.  
  24. int main()
  25. {
  26. tlista milista;
  27. pnodo nuevonodo;
  28. int opcion, num;
  29. inicia(milista);
  30. do{
  31. system("cls");
  32. cout << "*MATRIZ*" << endl;
  33. for(int i=0;i<4;i++){
  34. for(int j=0;j<4;j++){
  35. cout << matrix[i][j] << " ";
  36. }
  37. cout << endl;
  38. }
  39. cout << "1. Iniciar lista" << endl;
  40. cout << "2. Copiar contenido de la matriz a la lista" << endl;
  41. cout << "3. Invertir el orden de la lista" << endl;
  42. cout << "4. Mostrar lista" << endl;
  43. cout << "5. Salir" << endl;
  44. cin >> opcion;
  45. switch(opcion){
  46. case 1: inicia(milista); break;
  47. case 2: copiarContenido(milista); break;
  48. case 3: invertirLista(milista); break;
  49. case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  50. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  51. default: cout << "Opcion incorrecta" << endl;
  52. }
  53. system("pause");
  54. }while(opcion!=5);
  55. }
  56.  
  57. void inicia(tlista &lista)
  58. {
  59. lista.inicio=NULL;
  60. lista.final=NULL;
  61.  
  62. }
  63.  
  64. void agregar_final(tlista &lista, pnodo nuevo)
  65. {
  66. if(lista.inicio==NULL){
  67. lista.inicio=nuevo;
  68. lista.final=nuevo;
  69. }
  70. else{
  71. lista.final->sig=nuevo;
  72. lista.final=nuevo;
  73. }
  74. }
  75.  
  76. void copiarContenido(tlista &lista)
  77. {
  78. pnodo nuevo;
  79. for(int i=0;i<4;i++){
  80. for(int j=0;j<4;j++){
  81. nuevo=new tnodo;
  82. if(nuevo!=NULL){
  83. nuevo->dato=matrix[i][j];
  84. nuevo->sig=NULL;
  85. }
  86. else{
  87. cout << "MEMORIA INSUFICIENTE" << endl;
  88. }
  89. if(nuevo!=NULL){
  90. agregar_final(lista,nuevo);
  91. }
  92. }
  93. }
  94. }
  95.  
  96. void invertirLista(tlista &lista)
  97. {
  98. pnodo i, j;
  99. char buscado, aux;
  100. bool ordenado=true;
  101. buscado=lista.inicio->dato;
  102. while(ordenado){
  103. if(lista.inicio->dato==buscado){
  104. ordenado=false;
  105. }
  106. else{
  107. for(i=lista.inicio;i->sig!=NULL;i=i->sig){
  108. j=i->sig;
  109. aux=i->dato;
  110. i->dato=j->dato;
  111. j->dato=aux;
  112. }
  113. }
  114. }
  115. }
  116.  
  117. void mostrar(tlista lista)
  118. {
  119. pnodo i;
  120. if(lista.inicio!=NULL){
  121. for(i=lista.inicio;i!=NULL;i=i->sig){
  122. cout << "Nodo: " << i->dato << endl;
  123. }
  124. cout << endl;
  125. }
  126. else{
  127. cout << "LISTA VACIA" << endl;
  128. }
  129. }
  130.  

Y una ultiam cosilla, debo hacer otro modulo donde debo liberar el espacio de memoria de todos los nodos , al pareceer debo hacerlo nodo por nodo o liberar todo el espacio en memoria ocupado por la lista completea si alguien sabe ;)
286  Programación / Programación C/C++ / Pequeña duda sobre listas circulares simples en: 3 Septiembre 2018, 21:26 pm
Hola chavales, queria que me dijeran que estoy haciendo mal en este programa, deseo eliminar el ultimo nodo de la lsita circular y creo, creo que mi error esta en no declarar bien los apuntadores de inicio y final de la lista y el metodo de borrar ultimo nodo tambien me falla al parecer  :huh:

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. int contador;
  15. };
  16. void inicia(tlista &lista);
  17. void crear(pnodo &nuevo);
  18. void agregar_inicio(tlista &lista, pnodo nuevo);
  19. pnodo quitar_final(tlista &lista);
  20. void mostrar(tlista lista);
  21.  
  22. int main()
  23. {
  24. tlista milista;
  25. pnodo nuevonodo, eliminado;
  26. int opcion, num;
  27. inicia(milista);
  28. do{
  29. system("cls");
  30. cout << "1. Iniciar lista" << endl;
  31. cout << "2. Agregar al inicio" << endl;
  32. cout << "3. Quitar al final" << endl;
  33. cout << "4. Mostrar lista" << endl;
  34. cout << "5. Salir" << endl;
  35. cin >> opcion;
  36. switch(opcion){
  37. case 1: inicia(milista); break;
  38. case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
  39. case 3: eliminado=quitar_final(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;}break;
  40. case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  41. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  42. default: cout << "Opcion incorrecta" << endl;
  43. }
  44. system("pause");
  45. }while(opcion!=5);
  46. }
  47.  
  48. void inicia(tlista &lista)
  49. {
  50. lista.inicio=NULL;
  51. lista.final=NULL;
  52. lista.contador=0;
  53. }
  54.  
  55. void crear(pnodo &nuevo)
  56. {
  57. nuevo=new tnodo;
  58. if(nuevo!=NULL){
  59. cout << "Ingrese valor: "; cin >> nuevo->dato;
  60. nuevo->sig=NULL;
  61.  
  62. }
  63. else{
  64. cout << "MEMORIA INSUFICIENTE" << endl;
  65. }
  66. }
  67.  
  68. void agregar_inicio(tlista &lista, pnodo nuevo)
  69. {
  70. if(lista.inicio==NULL){
  71. lista.inicio=nuevo;
  72. lista.final=nuevo;
  73. }
  74. else{
  75. nuevo->sig=lista.inicio;
  76. lista.inicio=nuevo;
  77. }
  78. lista.contador++;
  79. }
  80.  
  81. pnodo quitar_final(tlista &lista)
  82. {
  83. pnodo borrado, i;
  84. if(lista.inicio==NULL){
  85. borrado=NULL;
  86. }
  87. else{
  88. if(lista.inicio==lista.final){
  89. borrado=lista.inicio;
  90. lista.inicio=NULL;
  91. lista.final=NULL;
  92. }
  93. else{
  94. for(i=lista.inicio;(i->sig)->sig!=lista.final->sig;i=i->sig)
  95. borrado=lista.final;
  96. lista.final=i;
  97. lista.final->sig=lista.inicio;
  98. }
  99. lista.contador--;
  100. }
  101. return borrado;
  102. }
  103.  
  104. void mostrar(tlista lista)
  105. {
  106. pnodo i;
  107. if(lista.inicio!=NULL){
  108. for(i=lista.inicio;i!=lista.final->sig;i=i->sig){
  109. cout << "Nodo: " << i->dato << endl;
  110. }
  111. cout << endl;
  112. cout << "Cantidad de elementos: " << lista.contador << endl;
  113. }
  114. else{
  115. cout << "LISTA VACIA" << endl;
  116. }
  117. }
  118.  



Me he quemado la cabeza tratando de eliminar el ultimo elemento de la lista circular la logica la tengo pero no se como programarlo  :huh:
Y al mostrar lista queria hacerlo con un for pero tampoco pude asi que use un do{}while(); Si alguien sabe codificacion en C++ me dice como es la cosa con borrar ultimo elemento de la lista circular , no hace falta que me explique de logica, muchas gracias  ;-)

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. int contador;
  15. };
  16. void inicia(tlista &lista);
  17. void crear(pnodo &nuevo);
  18. void agregar_inicio(tlista &lista, pnodo nuevo);
  19. pnodo quitar_final(tlista &lista);
  20. void mostrar(tlista lista);
  21.  
  22. int main()
  23. {
  24. tlista milista;
  25. pnodo nuevonodo, eliminado;
  26. int opcion, num;
  27. inicia(milista);
  28. do{
  29. system("cls");
  30. cout << "1. Iniciar lista" << endl;
  31. cout << "2. Agregar al inicio" << endl;
  32. cout << "3. Quitar al final" << endl;
  33. cout << "4. Mostrar lista" << endl;
  34. cout << "5. Salir" << endl;
  35. cin >> opcion;
  36. switch(opcion){
  37. case 1: inicia(milista); break;
  38. case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
  39. case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break;
  40. case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  41. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  42. default: cout << "Opcion incorrecta" << endl;
  43. }
  44. system("pause");
  45. }while(opcion!=5);
  46. }
  47.  
  48. void inicia(tlista &lista)
  49. {
  50. lista.inicio=NULL;
  51. lista.final=NULL;
  52. lista.contador=0;
  53. }
  54.  
  55. void crear(pnodo &nuevo)
  56. {
  57. nuevo=new tnodo;
  58. if(nuevo!=NULL){
  59. cout << "Ingrese valor: "; cin >> nuevo->dato;
  60. nuevo->sig=NULL;
  61.  
  62. }
  63. else{
  64. cout << "MEMORIA INSUFICIENTE" << endl;
  65. }
  66. }
  67.  
  68. void agregar_inicio(tlista &lista, pnodo nuevo)
  69. {
  70. if(lista.inicio==NULL){
  71. lista.inicio=nuevo;
  72. lista.final=nuevo;
  73. lista.final->sig=lista.inicio;
  74. }
  75. else{
  76. lista.final->sig=nuevo;
  77. nuevo->sig=lista.inicio;
  78. lista.inicio=nuevo;
  79. }
  80. lista.contador++;
  81. }
  82.  
  83. pnodo quitar_final(tlista &lista)
  84. {
  85. pnodo borrado, i;
  86. if(lista.inicio==NULL){
  87. borrado=NULL;
  88. }
  89. else{
  90. if(lista.inicio==lista.final){
  91. borrado=lista.inicio;
  92. lista.inicio=NULL;
  93. lista.final=NULL;
  94. }
  95. else{
  96. for(i=lista.inicio;i!=lista.final;i=i->sig);
  97. borrado=lista.final;
  98. i->sig=lista.inicio;
  99. lista.final=i;
  100. }
  101. lista.contador--;
  102. }
  103. return borrado;
  104. }
  105.  
  106. void mostrar(tlista lista)
  107. {
  108. pnodo i;
  109. bool seguir=true;
  110. if(lista.inicio!=NULL){
  111. i=lista.inicio;
  112. while(seguir){
  113. cout << "Nodo: " << i->dato << endl;
  114. if(i==lista.final){
  115. seguir=false;
  116. }
  117. i=i->sig;
  118. }
  119. }
  120. else{
  121. cout << "LISTA VACIA" << endl;
  122. }
  123. }
  124.  



Chicos lo acabo de resolver miren, porque nadie me lo dijo antes?

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. int contador;
  15. };
  16. void inicia(tlista &lista);
  17. void crear(pnodo &nuevo);
  18. void agregar_inicio(tlista &lista, pnodo nuevo);
  19. pnodo quitar_final(tlista &lista);
  20. void mostrar(tlista lista);
  21.  
  22. int main()
  23. {
  24. tlista milista;
  25. pnodo nuevonodo, eliminado;
  26. int opcion, num;
  27. inicia(milista);
  28. do{
  29. system("cls");
  30. cout << "1. Iniciar lista" << endl;
  31. cout << "2. Agregar al inicio" << endl;
  32. cout << "3. Quitar al final" << endl;
  33. cout << "4. Mostrar lista" << endl;
  34. cout << "5. Salir" << endl;
  35. cin >> opcion;
  36. switch(opcion){
  37. case 1: inicia(milista); break;
  38. case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
  39. case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break;
  40. case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  41. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  42. default: cout << "Opcion incorrecta" << endl;
  43. }
  44. system("pause");
  45. }while(opcion!=5);
  46. }
  47.  
  48. void inicia(tlista &lista)
  49. {
  50. lista.inicio=NULL;
  51. lista.final=NULL;
  52. lista.contador=0;
  53. }
  54.  
  55. void crear(pnodo &nuevo)
  56. {
  57. nuevo=new tnodo;
  58. if(nuevo!=NULL){
  59. cout << "Ingrese valor: "; cin >> nuevo->dato;
  60. nuevo->sig=NULL;
  61. }
  62. else{
  63. cout << "MEMORIA INSUFICIENTE" << endl;
  64. }
  65. }
  66.  
  67. void agregar_inicio(tlista &lista, pnodo nuevo)
  68. {
  69. if(lista.inicio==NULL){
  70. lista.inicio=nuevo;
  71. lista.final=nuevo;
  72. nuevo->sig=nuevo;//Hasta aca se que esta bien;
  73. }
  74. else{
  75. lista.final->sig=nuevo;
  76. nuevo->sig=lista.inicio;
  77. lista.inicio=nuevo;
  78. }
  79. lista.contador++;
  80. }
  81.  
  82. pnodo quitar_final(tlista &lista)
  83. {
  84. pnodo borrado, i;
  85. if(lista.inicio==NULL){
  86. borrado=NULL;
  87. }
  88. else{
  89. if(lista.inicio==lista.final){
  90. borrado=lista.inicio;
  91. lista.inicio=NULL;
  92. lista.final=NULL;
  93. }
  94. else{
  95. for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
  96. borrado=lista.final;
  97. lista.final=i;
  98. lista.final->sig=lista.inicio;
  99. }
  100. lista.contador--;
  101. }
  102. return borrado;
  103. }
  104.  
  105. void mostrar(tlista lista)
  106. {
  107. pnodo i;
  108. bool seguir=true;
  109. if(lista.inicio!=NULL){
  110. i=lista.inicio;
  111. while(seguir){
  112. cout << "Nodo: " << i->dato << endl;
  113. if(i==lista.final){
  114. seguir=false;
  115. }
  116. i=i->sig;
  117. }
  118. }
  119. else{
  120. cout << "LISTA VACIA" << endl;
  121. }
  122. }
  123.  



Mod: Prohibido el doble o triple post. Usa el botón "Modificar".
287  Programación / Programación C/C++ / 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.  
288  Programación / Programación C/C++ / Pequeña duda sobre recursion en: 3 Septiembre 2018, 00:33 am
Hola chavales tengo una pequeña duda acerca de este fragmento de codigo que a mi  parecer lo que hace es verificar si la lista esta vacia, caso contrario me devuelve la posicion en memoria del ultimo elemento de la lsita o me equivoco??  :huh:

Código
  1. pnodo desconocido(pnodo lista)
  2. {
  3. if(lista==NULL || lista->sig==NULL){
  4. return lista;
  5. }
  6. else{
  7. return desconocido(lista->sig);
  8. }
  9. }
289  Programación / Programación C/C++ / Modificacion del orden de una lista simplemente enlazada en: 2 Septiembre 2018, 16:57 pm
Hola, queria saber como puedo alterar el orden de una lista enlazada simple me piden lo siguiente, sin utilizar listas auxiliares, hacer una operacion donde los nodos se modifiquen segun espefica el usuario

LISTA ORIGINAL: LUNES->MARTES->MIERCOLES->JUEVES->VIERNES->SABADO->DOMINGO
Dia especificado por el usuario: JUEVES
LISTA MODIFICADA: JUEVES->VIERNES->SABADO->DOMINGO->LUNES->MARTES->MIERCOLES

He intentado ir agregando al final de la lista original los datos que son diferentes al dato especificado por el usuario y borrando el elemento inicial de la lista pero no tuve exito aca dejo el programa solo fijense en el modulo que se llama void modificar_lista(pnodo &lista)

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. typedef char tcad[16];
  8. typedef struct tnodo *pnodo;
  9. typedef struct tnodo{
  10. tcad dato;
  11. pnodo sig;
  12. };
  13.  
  14. void inicia(pnodo &lista);
  15. void crear(pnodo &nuevo);
  16. void agregar_final(pnodo &lista, pnodo nuevo);
  17. pnodo quitar_inicio(pnodo &lista);
  18. void modificar_lista(pnodo &lista);
  19. void mostrar(pnodo lista);
  20.  
  21. int main()
  22. {
  23. pnodo milista, nodo;
  24. int opcion;
  25. inicia(milista);
  26. do{
  27. system("cls");
  28. cout << "1. Iniciar lista" << endl;
  29. cout << "2. Agregar elementos a la lista" << endl;
  30. cout << "3. Modificar lista" << endl;
  31. cout << "4. Mostrar lista" << endl;
  32. cout << "5. Salir" << endl;
  33. cin >> opcion;
  34. switch(opcion){
  35. case 1: inicia(milista); break;
  36. case 2: crear(nodo); if(nodo!=NULL){agregar_final(milista,nodo);}; break;
  37. case 3: modificar_lista(milista); break;
  38. case 4: cout << "***LISTA***" << endl; mostrar(milista); break;
  39. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  40. default: cout << "Opcion incorrecta" << endl;
  41. }
  42. system("pause");
  43. }while(opcion!=5);
  44. }
  45.  
  46. void inicia(pnodo &lista)
  47. {
  48. lista=NULL;
  49. }
  50.  
  51. void crear(pnodo &nuevo)
  52. {
  53. nuevo=new tnodo;
  54. if(nuevo!=NULL){
  55. cout << "Ingrese dato: "; cin >> nuevo->dato;
  56. nuevo->sig=NULL;
  57. }
  58. else{
  59. cout << "MEMORIA INSUFICIENTE" << endl;
  60. }
  61. }
  62.  
  63. void agregar_final(pnodo &lista, pnodo nuevo)
  64. {
  65. pnodo i;
  66. if(lista==NULL){
  67. lista=nuevo;
  68. }
  69. else{
  70. for(i=lista;i->sig!=NULL;i=i->sig);
  71. i->sig=nuevo;
  72. }
  73. }
  74.  
  75. pnodo quitar_inicio(pnodo &lista)
  76. {
  77. pnodo borrado;
  78. if(lista==NULL){
  79. borrado=NULL;
  80. }
  81. else{
  82. borrado=lista;
  83. lista=lista->sig;
  84. borrado->sig=NULL;
  85. }
  86. return borrado;
  87. }
  88.  
  89. void modificar_lista(pnodo &lista)
  90. {
  91. pnodo i;
  92. tcad buscado;
  93. cout << "Ingrese dia de la semana: "; cin >> buscado;
  94. for(i=lista;i!=NULL;i=i->sig){
  95. if(strcmp(i->dato,buscado)!=0){
  96. agregar_final(lista,i);
  97. delete(quitar_inicio(lista));
  98. }
  99. else{
  100. break;
  101. }
  102. }
  103. }
  104.  
  105. void mostrar(pnodo lista)
  106. {
  107. pnodo i;
  108. if(lista!=NULL){
  109. for(i=lista;i!=NULL;i=i->sig){
  110. cout << "Nodo: " << i->dato << endl;
  111. }
  112. cout << endl;
  113. }
  114. else{
  115. cout << "LISTA VACIA" << endl;
  116. }
  117. }
  118.  
290  Programación / Programación C/C++ / Ayuda con recursividad en: 2 Septiembre 2018, 00:07 am
Hola, necesito una ayuda , non puedo sumar los valores de una lista enlazada simple la cual tiene un apuntador de inicio, dejo al estructura y la funcion recursiva que logre hasta ahora

Código
  1. typedef struct tnodo *pnodo;
  2. typedef struct tnodo{
  3. int dato;
  4. pnodo sig;
  5. };
  6. typedef struct tlista{
  7. pnodo inicio;
  8. };

Código
  1. int sumar(tlista lista)
  2. {
  3. pnodo i;
  4. if(lista.inicio==NULL){
  5. return 0;
  6. }
  7. else{
  8. return lista.inicio->dato+sumar(i=i->sig);
  9. }
  10. }

 ;-)
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines