Advertisement
wojtas626

[C++] Klasa lista pojedynczo wiązana

Mar 11th, 2015
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. #ifndef LISTA_H
  2. #define LISTA_H
  3.  
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. class Lista
  9. {
  10. private:
  11.     class Node
  12.     {
  13.         friend class Lista;
  14.     private:
  15.         string text;
  16.         Node *next;
  17.  
  18.         Node(string newString)
  19.         {
  20.             text = newString;
  21.             next = NULL;
  22.         }
  23.     };
  24.     Node *head;
  25.     int length;
  26.  
  27. public:
  28.     Lista();
  29.     Lista(string newString);
  30.     Lista(const Lista&);
  31.     ~Lista();
  32.  
  33.  
  34.     void pushBack(string newString);
  35.     void pushFront(string newString);
  36.     void popBack();
  37.     void popFront();
  38.     int indexOf(string textToFind);
  39.     int getLength();
  40.     string getElementOfIndex(int index);
  41.     void showAll();
  42.  
  43. };
  44.  
  45. #endif
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56. #include "lista.h"
  57. #include <string>
  58. #include <iostream>
  59.  
  60. using namespace std;
  61.  
  62. Lista::Lista()
  63. {
  64.     length = 0;
  65.     head = NULL;
  66. }
  67.  
  68.  
  69. Lista::Lista(string newString)
  70. {
  71.     head = new Node(newString);
  72.     length = 1;
  73. }
  74.  
  75. Lista::Lista(const Lista &lis)
  76. {
  77.     this->length = 0;
  78.     this->head = NULL;
  79.     Node *pointer = lis.head;
  80.     while (pointer != NULL)
  81.     {
  82.         this->pushBack(pointer->text);
  83.         pointer = pointer->next;
  84.     }
  85. }
  86.  
  87. Lista::~Lista()
  88. {
  89.     while (length > 0) popFront();
  90. }
  91.  
  92.  
  93. void Lista::pushBack(string newString)
  94. {
  95.     if (Lista::head == NULL)
  96.     {
  97.         head = new Node(newString);
  98.         length++;
  99.     }
  100.     else
  101.     {
  102.         Node *pointer = head;
  103.         while (pointer->next != NULL)
  104.         {
  105.             pointer = pointer->next;
  106.         }
  107.         (pointer->next) = new Node(newString);
  108.         length++;
  109.     }
  110. }
  111.  
  112.  
  113. void Lista::pushFront(string newString)
  114. {
  115.     if (Lista::head == NULL)
  116.     {
  117.         head = new Node(newString);
  118.         length++;
  119.     }
  120.     else
  121.     {
  122.         Node *pointer = new Node(newString);
  123.         pointer->next = head;
  124.         head = pointer;
  125.         length++;
  126.     }
  127. }
  128.  
  129.  
  130.  
  131. void Lista::popBack()
  132. {
  133.     if (head != NULL)
  134.     {
  135.         if (head->next == NULL)
  136.         {
  137.             delete head;
  138.             head = NULL;
  139.             length--;
  140.         }
  141.         else
  142.         {
  143.             Node *pointerLast = head;
  144.             Node *pointerBefore = pointerLast;
  145.             while (pointerLast->next != NULL)
  146.             {
  147.                 pointerBefore = pointerLast;
  148.                 pointerLast = pointerLast->next;
  149.             }
  150.             pointerBefore->next = NULL;
  151.             delete pointerLast;
  152.             length--;
  153.         }
  154.     }
  155. }
  156.  
  157.  
  158. void Lista::popFront()
  159. {
  160.     if (head != NULL)
  161.     {
  162.         Node *pointer = head->next;
  163.         delete head;
  164.         head = pointer;
  165.         length--;
  166.     }
  167. }
  168.  
  169. int Lista::getLength()
  170. {
  171.     return length;
  172. }
  173.  
  174. string Lista::getElementOfIndex(int index)
  175. {
  176.     if ( (index >= 0) && (index < length) )
  177.     {
  178.         Node *pointer = head;
  179.         for (int i = 0; i < index; i++)
  180.         {
  181.             pointer = pointer->next;
  182.         }
  183.         return (pointer->text);
  184.     }
  185.     else return "Wrong Index!!!!!!!!!!!!!!!!!!!!!!";
  186. }
  187.  
  188. int Lista::indexOf(string textToFind)
  189. {
  190.     if (length == 0) return -1;
  191.     else
  192.     {
  193.         Node *pointer = head;
  194.         int i = -1;
  195.         while (pointer != NULL)
  196.         {
  197.             i++;
  198.             if ( (pointer->text).compare(textToFind) == 0 )
  199.             {
  200.                 return i;
  201.             }
  202.             pointer = pointer->next;
  203.         }
  204.         return -1;
  205.     }
  206. }
  207.  
  208.  
  209. void Lista::showAll()
  210. {
  211.     Node *pointer = head;
  212.     while (pointer != NULL)
  213.     {
  214.         cout << pointer->text << endl;
  215.         pointer = pointer->next;
  216.     }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement