Advertisement
Guest User

Untitled

a guest
May 31st, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. #ifndef ARBRE_HH
  2. #define ARBRE_HH
  3.  
  4. #include "PRO2Excepcio.hh"
  5. #include <cstddef> // per poder fer servir el NULL
  6.  
  7. template <class T> class Arbre {
  8.  
  9. private:
  10.  
  11. struct node_arbre {
  12. T info;
  13. node_arbre* segE;
  14. node_arbre* segD;
  15. };
  16.  
  17. node_arbre* primer_node;
  18.  
  19. // especificació operacions privades
  20.  
  21. node_arbre* copia_node_arbre(node_arbre* m)
  22. /* Pre: cert */
  23. /* Post: el resultat és NULL si m és NULL;
  24. en cas contrari, el resultat apunta al node arrel
  25. d'una jerarquia de nodes que és una còpia de la
  26. jerarquia de nodes que té el node apuntat per m com a arrel */
  27. {
  28. node_arbre* n;
  29. if (m==NULL) n=NULL;
  30. else {
  31. n = new node_arbre;
  32. n->info = m->info;
  33. n->segE = copia_node_arbre(m->segE);
  34. n->segD = copia_node_arbre(m->segD);
  35. }
  36. return n;
  37. }
  38.  
  39. void esborra_node_arbre(node_arbre* m)
  40. /* Pre: cert */
  41. /* Post no fa res si m és NULL; en cas contrari,
  42. allibera espai de tots els nodes de la
  43. jerarquia que té el node apuntat per m com a arrel */
  44. {
  45. if (m != NULL) {
  46. esborra_node_arbre(m->segE);
  47. esborra_node_arbre(m->segD);
  48. delete m;
  49. }
  50. }
  51.  
  52. public:
  53.  
  54. // especificació operacions públiques
  55.  
  56. Arbre()
  57. /* Pre: cert */
  58. /* Post: el p.i. és un arbre buit */
  59. {
  60. primer_node= NULL;
  61. }
  62.  
  63. Arbre(const Arbre& original)
  64. /* Pre: cert */
  65. /* Post: el p.i. és una còpia d'original */
  66. {
  67. if (this != &original)
  68. primer_node = copia_node_arbre(original.primer_node);
  69. }
  70.  
  71. ~Arbre() {
  72. esborra_node_arbre(primer_node);
  73. }
  74.  
  75. Arbre& operator=(const Arbre& original) {
  76. if (this != &original) {
  77. esborra_node_arbre(primer_node);
  78. primer_node = copia_node_arbre(original.primer_node);
  79. }
  80. return *this;
  81. }
  82.  
  83. void a_buit()
  84. /* Pre: cert */
  85. /* Post: el p.i. és un arbre buit */
  86. {
  87. esborra_node_arbre(primer_node);
  88. primer_node= NULL;
  89. }
  90.  
  91. void swap(Arbre &a)
  92. /* Pre: a=A, p.i. = P */
  93. /* Post: el p.i. passa a ser A; a passa a ser P */
  94. {
  95. node_arbre* aux;
  96. aux = a.primer_node;
  97. a.primer_node = primer_node;
  98. primer_node = aux;
  99. }
  100.  
  101. void plantar(const T &x, Arbre &a1, Arbre &a2)
  102. /* Pre: el p.i. és buit, a1=A1, a2=A2, el p.i. no es el mateix objecte
  103. que a2 ni que a2 */
  104. /* Post: el p.i. té x com a arrel, A1 com a fill esquerre i A2 com a
  105. fill dret; a1 i a2 són buits; si A1 i A2 són el mateix objecte, el
  106. fill dret n'és una còpia */
  107. {
  108. if (this != &a1 and this != &a2) {
  109. if (primer_node==NULL) {
  110. node_arbre* aux;
  111. aux= new node_arbre;
  112. aux->info= x;
  113. aux->segE= a1.primer_node;
  114. if (a1.primer_node == a2.primer_node) aux->segD= copia_node_arbre(a1.primer_node);
  115. else aux->segD= a2.primer_node;
  116. primer_node= aux;
  117. a1.primer_node= NULL;
  118. a2.primer_node= NULL;
  119. }
  120. else
  121. throw PRO2Excepcio ("El p.i. de plantar ha de ser buit a la crida");
  122. }
  123. else
  124. throw PRO2Excepcio ("El p.i. de plantar no pot coincidir amb els paràmetres");
  125. }
  126.  
  127.  
  128. void fills (Arbre &fe, Arbre &fd)
  129. /* Pre: el p.i. no és buit i li diem A, fe i fd són buits i no són el
  130. mateix objecte */
  131. /* Post: fe és el fill esquerre d'A, fd és el fill dret d'A,
  132. el p.i. és buit */
  133. {
  134. if (primer_node!=NULL and fe.primer_node==NULL
  135. and fd.primer_node==NULL) {
  136. if (&fe != &fd) {
  137. node_arbre* aux;
  138. aux= primer_node;
  139. fe.primer_node= aux->segE;
  140. fd.primer_node= aux->segD;
  141. primer_node= NULL;
  142. delete aux;
  143. }
  144. else
  145. throw PRO2Excepcio
  146. ("Els dos paràmetres de fills no poden coincidir");
  147. }
  148. else if (primer_node==NULL)
  149. throw PRO2Excepcio ("Un arbre buit no té fills");
  150. else
  151. throw PRO2Excepcio
  152. ("Els dos paràmetres de fills han de ser buits a la crida");
  153. }
  154.  
  155. T arrel() const
  156. /* Pre: el p.i. no és buit */
  157. /* Post: el resultat és l'arrel del p.i. */
  158. {
  159. if (primer_node!=NULL)
  160. return primer_node->info;
  161. else
  162. throw PRO2Excepcio ("Un arbre buit no té arrel");
  163. }
  164.  
  165. bool es_buit() const
  166. /* Pre: cert */
  167. /* Post: el resultat indica si el p.i. és un arbre buit */
  168. {
  169. return (primer_node==NULL);
  170. }
  171.  
  172. };
  173.  
  174. #endif
  175.  
  176.  
  177.  
  178.  
  179.  
  180. FIND----------------------------
  181.  
  182. bool Textos::find(string palabra,list<string> l) {
  183. list<string>::iterator it = l.begin();
  184. while (it != l.end()) {
  185. if (palabra == (*it)) return true;
  186. ++it;
  187. }
  188. return false;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement