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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 ... 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [60] 61 62 63 64
591  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 ;)
592  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".
593  Programación / Programación C/C++ / Re: Ayuda con listas 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:
594  Programación / Programación C/C++ / Re: Modificacion del orden de una lista simplemente enlazada en: 3 Septiembre 2018, 01:57 am
Use un bubble_sort sobre la lista fue mas facil

Código
  1. void modificar_lista(pnodo &lista)
  2. {
  3. pnodo i, j;
  4. tcad buscado, aux;
  5. bool ordenado=true;
  6. cout << "Ingrese dia de la semana: "; cin >> buscado;
  7. while(ordenado){
  8. if(strcmp(lista->dato,buscado)==0){
  9. ordenado=false;
  10. }
  11. else{
  12. for(i=lista;i->sig!=NULL;i=i->sig){
  13. j=i->sig;
  14. strcpy(aux,i->dato);
  15. strcpy(i->dato,j->dato);
  16. strcpy(j->dato,aux);
  17. }
  18. }
  19. }
  20. }
595  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.  
596  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. }
597  Programación / Programación C/C++ / Re: Proyecto final C++ en: 2 Septiembre 2018, 22:39 pm
Puedes usar el tda fecha y algun calculo para realizar el calculo exacto de la edad de una persona

TDA FECHA

Código
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX=3;
  7. typedef int t_fecha[MAX];
  8.  
  9. void crear_fecha(t_fecha &n);
  10. bool VALIDAR(t_fecha n);
  11. void mostrar_fecha(t_fecha n);
  12. void comparar_fechas(t_fecha n, t_fecha m);
  13. void mayor_fechas(t_fecha n, t_fecha m);
  14.  
  15. int main()
  16. {
  17. t_fecha a, b;
  18. crear_fecha(a);
  19. crear_fecha(b);
  20. comparar_fechas(a, b);
  21. mayor_fechas(a, b);
  22. system("pause");
  23. return 0;
  24. }
  25.  
  26. void crear_fecha(t_fecha &n)
  27. {
  28. do{
  29. cout << "Ingrese dia: "; cin >> n[0];
  30. cout << "Ingrese mes: "; cin >> n[1];
  31. cout << "Inrese año : "; cin >> n[2];
  32. }while(VALIDAR(n)==false);
  33. mostrar_fecha(n);
  34. }
  35. bool VALIDAR(t_fecha n)
  36. {
  37. if(n[1]>=1 && n[1]<=12){
  38. switch(n[1]){
  39. case 1: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  40. case 2: if(n[2]%4==0){
  41. if(n[0]>0 && n[0]<30){return true;}else{return false;}
  42. }
  43. else{
  44. if(n[0]>0 && n[0]<29){return true;}else{return false;}
  45. }; break;
  46. case 3: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  47. case 4: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break;
  48. case 5: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  49. case 6: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break;
  50. case 7: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  51. case 8: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  52. case 9: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break;
  53. case 10: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  54. case 11: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break;
  55. case 12: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break;
  56. default: return false;
  57. }
  58. }
  59. else{
  60. return false;
  61. }
  62. }
  63.  
  64. void mostrar_fecha(t_fecha n)
  65. {
  66. cout << n[0] << "/" << n[1] << "/" << n[2] << endl;
  67. }
  68.  
  69. void comparar_fechas(t_fecha n, t_fecha m)
  70. {
  71. if(n[0]==m[0] && n[1]==m[1] && n[2]==m[2]){
  72. cout << "Las fechas son iguales" << endl;
  73. }
  74. else{
  75. cout << "Las fechas son diferentes" << endl;
  76. }
  77.  
  78. }
  79.  
  80. void mayor_fechas(t_fecha n, t_fecha m)
  81. {
  82. if(n[2]>m[2]){
  83. cout << "Es mayor "; mostrar_fecha(n);
  84. }
  85. else{
  86. if(n[2]<m[2]){
  87. cout << "Es mayor "; mostrar_fecha(m);
  88. }
  89. else{
  90. if(n[1]>m[1]){
  91. cout << "Es mayor "; mostrar_fecha(n);
  92. }
  93. else{
  94. if(n[1]<m[1]){
  95. cout << "Es mayor "; mostrar_fecha(m);
  96. }
  97. else{
  98. if(n[0]>m[0]){
  99. cout << "Es mayor "; mostrar_fecha(n);
  100. }
  101. else{
  102. if(n[0]<m[0]){
  103. cout << "Es mayor "; mostrar_fecha(m);
  104. }
  105. else{
  106. cout << "Son iguales" << endl;
  107. }
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114.  

CALCULO EDAD

Código
  1. [int d, m ,a, edad;
  2. cout << "8/8/2014 << endl;
  3. cout << "COLOQUE FECHA DE NACIMIENTO EN FORMATO DD/MM/AAAA:" << endl;
  4. cin >> d >> m >> a;
  5. edad=2014-a;
  6. if(m==8){
  7. if(d<8){
  8. edad++;
  9. }
  10. else{
  11. if(d>8){
  12. edad--;
  13. }
  14. }
  15. }
  16. else{
  17. if(m<8){
  18. edad++;
  19. }
  20. else{
  21. edad--;
  22. }
  23. }
598  Programación / Programación C/C++ / Re: Ayuda con recursividad en: 2 Septiembre 2018, 22:07 pm
La profe dijo que ya esta bien, igual gracias
599  Programación / Programación C/C++ / Re: Modificacion del orden de una lista simplemente enlazada en: 2 Septiembre 2018, 21:47 pm
No, tiene que ser lista enlazada simple sin apuntadores y sin usar listas auxiliares, igual gracias
600  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.  
Páginas: 1 ... 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [60] 61 62 63 64
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines