fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Element{
  5. private:
  6. int medals;
  7. string name;
  8. Element* previous;
  9. Element* next;
  10.  
  11. public:
  12. Element(int medals, string name){
  13. this->medals = medals;
  14. this->name = name;
  15. this->previous = NULL;
  16. this->next =NULL;
  17. }
  18.  
  19. void setMedals(int medals){
  20. this->medals = medals;
  21. }
  22.  
  23. int getMedals(){
  24. return this->medals;
  25. }
  26.  
  27. void setName(string name){
  28. this->name = name;
  29. }
  30.  
  31. string getName(){
  32. return this->name;
  33. }
  34.  
  35. void setPrevious(Element* previous){
  36. this->previous = previous;
  37. }
  38.  
  39. Element* getPrevious(){
  40. return this->previous;
  41. }
  42.  
  43. void setNext(Element* next){
  44. this->next = next;
  45. }
  46.  
  47. Element* getNext(){
  48. return this->next;
  49. }
  50. };
  51.  
  52.  
  53. class DoubleLinkedList{
  54. private:
  55. Element* first;
  56. Element* last;
  57.  
  58. public:
  59. DoubleLinkedList(){
  60. this->first = NULL;
  61. this->last = NULL;
  62. }
  63.  
  64. void add(Element* e){
  65. if(this->first == NULL){
  66. this->first = e;
  67. this->last = this->first;
  68. return;
  69. }
  70. this->last->setNext(e);
  71. e->setPrevious(this->last);
  72. this->last = e;
  73. }
  74.  
  75. void sortDesc(){
  76. if(this->first == NULL){
  77. cout << "List empty" << endl;
  78. return;
  79. }else if(this->first->getNext() == NULL){
  80. cout << "There is just one element in the list" << endl;
  81. return;
  82. }
  83.  
  84. Element* temp = this->first;
  85. int aux = -1;
  86.  
  87. while(temp != NULL){
  88. if(temp->getNext() != NULL && (temp->getMedals() < temp->getNext()->getMedals()) ){
  89. this->swapNext(temp);
  90. continue;
  91. }
  92. temp = temp->getNext();
  93. }
  94.  
  95. }
  96.  
  97. void swapNext(Element* e){
  98. if(e == NULL){
  99. cout << "Null parameter!" << endl;
  100. return;
  101. }else if(e->getNext() == NULL){
  102. cout << "The next element to the parameter is null!" << endl;
  103. return;
  104. }
  105. if(e == this->first){
  106. this->first = e->getNext();
  107.  
  108. //TODO: Hay un error Swaping los elementos cuando el elemento no es el primero
  109. Element* temp = e->getNext();
  110.  
  111. if(e->getNext()->getNext() != NULL) e->getNext()->getNext()->setPrevious(e);
  112.  
  113. e->setNext(e->getNext()->getNext());
  114. e->setPrevious(temp);
  115.  
  116. temp->setPrevious(e->getPrevious());
  117. temp->setNext(e);
  118. }else{
  119. if(e->getNext() == this->last){
  120. this->last = e;
  121. }
  122. Element* temp = e->getNext()->getNext();;
  123. if(temp != NULL){
  124. temp->setPrevious(e);
  125. }
  126. e->getPrevious()->setNext(e->getNext());
  127. e->getNext()->setPrevios(e->getPrevious());
  128. e->setPrevious(e->getNext());
  129. e->getPrevious()->setNext(e);
  130. e->getNext(temp);
  131. }
  132. }
  133.  
  134. void printElements(){
  135. if(this->first == NULL){
  136. cout << "List empty." << endl;
  137. return;
  138. }
  139. Element* temp = this->first;
  140.  
  141. while(temp != NULL){
  142. cout << temp->getName() << " : " << temp->getMedals() << endl;
  143.  
  144. temp = temp->getNext();
  145. }
  146. }
  147.  
  148. };
  149.  
  150. int main(){
  151. Element* e1 = new Element(1,"Dawlin");
  152. Element* e2 = new Element(3,"Juan");
  153. Element* e3 = new Element(2,"Samuel");
  154.  
  155. DoubleLinkedList* list = new DoubleLinkedList();
  156.  
  157. list->add(e1);
  158. list->add(e2);
  159. list->add(e3);
  160. list->printElements();
  161. list->sortDesc();
  162. list->printElements();
  163.  
  164. delete list;
  165.  
  166. return 0;
  167. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In member function 'void DoubleLinkedList::swapNext(Element*)':
prog.cpp:127:27: error: 'class Element' has no member named 'setPrevios'
             e->getNext()->setPrevios(e->getPrevious());
                           ^
prog.cpp:130:28: error: no matching function for call to 'Element::getNext(Element*&)'
             e->getNext(temp);
                            ^
prog.cpp:47:18: note: candidate: Element* Element::getNext()
         Element* getNext(){
                  ^
prog.cpp:47:18: note:   candidate expects 0 arguments, 1 provided
stdout
Standard output is empty