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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 18



Ver Perfil
clase para trabjar con listas simples
« en: 4 Enero 2011, 11:42 am »

¡Buenas señores! He estado trabajando en un código que me permita trabajar con listas simples a modo de array dinámico y este es el resultado. La idea era que el comportamiento final de la clase fuera fácil e intuitivo, y espero haberlo conseguido  ;-)... Sin embargo la mayor limitación de mi trabajo radica en la forma de agregar los datos, pues sólo se puede introducir a la cabeza o a la cola de la lista, y no de forma aleatoria. A pesar de ello espero que les pueda servir de ayuda en códigos más complicados  :D

Código
  1. // Autor: Namida
  2. // Fecha: 04 enero 2011
  3.  
  4. /// DIRECTIVAS GENERALES DEL PREPROCESADOR
  5. #define _list_
  6.  
  7. #ifndef NULL
  8. #define NULL 0
  9. #endif
  10.  
  11. #define OFF false
  12. #define ON true
  13.  
  14.  
  15. ///CODIGO
  16. // Declaraciones Previas
  17. template<typename TYPE> class list;
  18. template<typename TYPE> list<TYPE> &operator < (list<TYPE> &L,TYPE X);
  19. template<typename TYPE> list<TYPE> &operator > (list<TYPE> &L,TYPE X);
  20. template<typename TYPE> list<TYPE> &operator ~ (list<TYPE> &L);
  21.  
  22. // Declaracion
  23. template<typename TYPE> class list
  24. {
  25. private:
  26.  
  27. /*Definicion del nodo*/
  28. struct node{
  29. TYPE data;
  30. node* next_node;
  31. };
  32.  
  33. /*Informacion sobre la lista*/
  34. node* first_node;
  35. unsigned list_size;
  36. bool delete_mode;
  37.  
  38. public:
  39.  
  40. /*Constructor de clase*/
  41. list();
  42.  
  43. /*Operadores*/
  44. //Escritura
  45. friend list<TYPE> &operator < <TYPE>(list<TYPE> &L,TYPE X);
  46. friend list<TYPE> &operator > <TYPE>(list<TYPE> &L,TYPE X);
  47. //Lectura
  48. TYPE operator [] (unsigned N);
  49. //Borrado
  50. friend list<TYPE> &operator ~ <TYPE>(list<TYPE> &L);
  51.  
  52. /*Descriptor*/
  53. unsigned Size();
  54.  
  55. };
  56.  
  57. // Metodos
  58. /*Constructor*/
  59. template<typename TYPE> list<TYPE>::list(){
  60. first_node=NULL;
  61. list_size=0;
  62. delete_mode=OFF;
  63. };
  64. /*Operadores*/
  65. //Escritura
  66. template<typename TYPE> list<TYPE> &operator < (list<TYPE> &L,TYPE X){
  67. list<TYPE>::node* new_node=new list<TYPE>::node;
  68. new_node->data=X;
  69. new_node->next_node=NULL;
  70.  
  71. if (L.first_node!=NULL){
  72. list<TYPE>::node* aux_node=L.first_node;
  73. while (aux_node->next_node!=NULL){
  74. aux_node=aux_node->next_node;
  75. };
  76. aux_node->next_node=new_node;
  77. }else{
  78. L.first_node=new_node;
  79. };
  80. L.list_size+=1;
  81. return L;
  82. };
  83. template<typename TYPE> list<TYPE> &operator > (list<TYPE> &L,TYPE X){
  84. list<TYPE>::node* new_node=new list<TYPE>::node;
  85. new_node->data=X;
  86. new_node->next_node=L.first_node;
  87. L.first_node=new_node;
  88. L.list_size+=1;
  89. return L;
  90. };
  91. //Lectura
  92. template<typename TYPE> TYPE list<TYPE>::operator [] (unsigned N){
  93. try{
  94. if (N<list_size){
  95. switch (delete_mode){
  96. case OFF:
  97. {
  98. node* aux_node=first_node;
  99. for(unsigned i=0;i<N;i++){
  100. aux_node=aux_node->next_node;
  101. };
  102. return aux_node->data;
  103. };
  104. case ON:
  105. {
  106. if (N==0){
  107. node* aux_node=first_node;
  108. first_node=aux_node->next_node;
  109. delete aux_node;
  110.  
  111.  
  112. }else{
  113. node* aux_node=first_node;
  114. for(int i=0;i<int(N)-1;i++){
  115. aux_node=aux_node->next_node;
  116. };
  117. node* delete_node=aux_node->next_node;
  118. aux_node->next_node=aux_node->next_node->next_node;
  119. delete delete_node;
  120. };
  121. list_size-=1;
  122. delete_mode=OFF;
  123. throw 0;
  124. };
  125. };
  126. }else{
  127. throw 0;
  128. };
  129. }catch(int code){
  130. TYPE X=TYPE();
  131. return X;
  132. };
  133. };
  134. //Borrado
  135. template<typename TYPE> list<TYPE> &operator ~ (list<TYPE> &L){
  136. L.delete_mode=ON;
  137. return L;
  138. };
  139.  
  140. /*Descriptor*/
  141. template<typename TYPE> unsigned list<TYPE>::Size(){
  142. return list_size;
  143. };
  144.  
  145. #undef OFF
  146. #undef ON
  147.  
Un ejemplo de su uso
[/size]
Código
  1. #include"list.h"
  2.  
  3. int main(int argc,char* argv[]){
  4.  
  5. //Creacion de una lista tipo int
  6. list<int> L=list<int>();
  7.  
  8. /* Agregar datos
  9. A la cola*/
  10. L<0<1<2<3<4;
  11. /*A la cabeza*/
  12. L>5>6;
  13.  
  14. //Estado actual de la lista: 6-5-0-1-2-3-4
  15.  
  16. //Leer informacion de la lista
  17. L[1]; //Devuelve el numero 5
  18.  
  19. //Borrado
  20. (~L)[1]; //Elimina el numero 5 de la lista
  21.  
  22. L.Size(); //Devuelve el tamagno de la lista
  23.  
  24. return 0;
  25. };
  26.  


« Última modificación: 5 Enero 2011, 12:32 pm por Namida » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
listas enlazadas simples en c++(soy novato)
Programación C/C++
pein 1 4,021 Último mensaje 9 Octubre 2010, 03:25 am
por Littlehorse
Clase Derivada; Listas de Inicializacion.
Programación C/C++
necro1991 2 4,595 Último mensaje 11 Octubre 2010, 05:45 am
por necro1991
operaciones basicas con listas Simples y Dobles....
Programación C/C++
ANTÓN RAMIREZ 0 6,225 Último mensaje 14 Diciembre 2010, 21:10 pm
por ANTÓN RAMIREZ
Pequeña duda sobre listas circulares simples
Programación C/C++
Beginner Web 0 1,820 Último mensaje 3 Septiembre 2018, 21:26 pm
por Beginner Web
Listas simples (Insertar Buscar)
Java
Dany Solis 1 5,171 Último mensaje 29 Noviembre 2018, 16:41 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines