Haval1

double linked list

Apr 6th, 2019
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. void doubleList::doubleAddEnd(int item, doubleNode *&head, doubleNode *&tail)
  2. {
  3.     doubleNode *newNode = new doubleNode;
  4.     newNode->next = NULL;
  5.     newNode->data = item;
  6.     if (head == NULL)
  7.     {
  8.         newNode->perv = NULL;
  9.         head = tail = newNode;
  10.     }
  11.     else
  12.     {
  13.         newNode->perv = tail;
  14.         tail->next = newNode;
  15.         tail = newNode;
  16.     }
  17. }
  18.  
  19. //Lab functions
  20. void doubleList::doubleAddBegin(int item, doubleNode *&head, doubleNode *&tail)
  21. {
  22.     doubleNode *newNode = new doubleNode;
  23.     newNode->perv = NULL;
  24.     newNode->data = item;
  25.     if (head == NULL)
  26.     {
  27.         newNode->next = NULL;
  28.         head = tail = newNode;
  29.     }
  30.     else
  31.     {
  32.         newNode->next = head;
  33.         head->perv = newNode;
  34.         head = newNode;
  35.     }
  36. }
  37.  
  38. //Lab functions
  39. void doubleList::doubleAddByPosition(int item, doubleNode *&head, doubleNode *&tail, int pos)
  40. {
  41.     doubleNode *newNode = new doubleNode;
  42.     newNode->next = NULL;
  43.     newNode->data = item;
  44.     doubleNode *temp;
  45.     temp = head;
  46.     int tempos = 1;
  47.     if (head == NULL)
  48.     {
  49.         cout << "\nEmpty list, location not found\n";
  50.     }
  51.     else
  52.     {
  53.         while (tempos != pos)
  54.         {
  55.             if (temp == NULL)
  56.             {
  57.                 cout << "The required location not found\n";
  58.             }
  59.             else
  60.             {
  61.                 temp = temp->next;
  62.             }
  63.             tempos++;
  64.         }
  65.     }
  66.     if (temp->next == NULL)
  67.     {
  68.         temp->next = newNode;
  69.         newNode->perv = temp;
  70.         newNode->next = NULL;
  71.         tail = newNode;
  72.     }
  73.     else
  74.     {
  75.         newNode->perv = temp;
  76.         newNode->next = temp->next;
  77.         temp->next->perv = newNode;
  78.         temp->next = newNode;
  79.     }
  80. }
  81.  
  82. //lab function
  83. void doubleList::doubleAddByData(int item, doubleNode *&head, doubleNode *&tail, int value)
  84. {
  85.     doubleNode *newNode = new doubleNode;
  86.     newNode->next = NULL;
  87.     newNode->data = item;
  88.     doubleNode *temp;
  89.     temp = head;
  90.     if (head == NULL)
  91.     {
  92.         cout << "\nEmpty list, location not found\n";
  93.     }
  94.     else
  95.     {
  96.         while (temp->data != value)
  97.         {
  98.             if (temp == NULL)
  99.             {
  100.                 cout << "The required location not found\n";
  101.             }
  102.             else
  103.             {
  104.                 temp = temp->next;
  105.             }
  106.         }
  107.     }
  108.     if (temp->next == NULL)
  109.     {
  110.         temp->next = newNode;
  111.         newNode->perv = temp;
  112.         newNode->next = NULL;
  113.         tail = newNode;
  114.     }
  115.     else
  116.     {
  117.         newNode->perv = temp;
  118.         newNode->next = temp->next;
  119.         temp->next->perv = newNode;
  120.         temp->next = newNode;
  121.     }
  122. }
  123.  
  124. //lab function
  125. void doubleList::doubleDisplay(doubleNode *&head)
  126. {
  127.     doubleNode *temp = new doubleNode;
  128.     temp = head;
  129.     if (head == NULL)
  130.     {
  131.         cout << "Empty list\n";
  132.     }
  133.     else
  134.     {
  135.         while (temp != NULL)
  136.         {
  137.             cout << "--| " << temp->data << endl;
  138.             temp = temp->next;
  139.         }
  140.     }
  141.     cout << endl;
  142. }
  143.  
  144. //lab function
  145. void doubleList::doubleDeleteEnd(doubleNode *&head, doubleNode *&tail)
  146. {
  147.     if (head == NULL)
  148.     {
  149.         cout << "Empty list\n";
  150.         return;
  151.     }
  152.     else
  153.     {
  154.         doubleNode *temp;
  155.         temp = tail;
  156.         if (temp->next == NULL && temp->perv == NULL)
  157.         {
  158.             head = tail = NULL;
  159.             delete temp;
  160.         }
  161.         else
  162.         {
  163.             tail = tail->perv;
  164.             tail->next = NULL;
  165.             delete temp;
  166.         }
  167.     }
  168. }
  169.  
  170. //lab function
  171. void doubleList::doubleDeleteBegin(doubleNode *&head)
  172. {
  173.     if (head == NULL)
  174.     {
  175.         cout << "Empty list\n";
  176.         return;
  177.     }
  178.     else
  179.     {
  180.         doubleNode *temp;
  181.         temp = head;
  182.         if (temp->next == NULL)
  183.         {
  184.             head = NULL;
  185.             delete temp;
  186.         }
  187.         else
  188.         {
  189.             head = head->next;
  190.             head->perv = NULL;
  191.             delete temp;
  192.         }
  193.     }
  194. }
  195.  
  196. //lab function
  197. void doubleList::doubleDeleteByPosition(int pos, doubleNode *&head, doubleNode *&tail)
  198. {
  199.     doubleNode *temp;
  200.     temp = head;
  201.     int tempos = 1;
  202.     if (head == NULL)
  203.     {
  204.         cout << "Empty list\n";
  205.         return;
  206.     }
  207.     else
  208.     {
  209.         while (tempos != pos)
  210.         {
  211.             if (temp = NULL)
  212.             {
  213.                 cout << "The required position not found\n";
  214.                 return;
  215.             }
  216.             else
  217.             {
  218.                 temp = temp->next;
  219.             }
  220.             tempos++;
  221.         }
  222.     }
  223.     if (temp->next == NULL && temp->perv == NULL)
  224.     {
  225.         head = tail = NULL;
  226.         delete temp;
  227.     }
  228.     else if (temp == head)
  229.     {
  230.         head = head->next;
  231.         head->perv = NULL;
  232.         delete temp;
  233.     }
  234.     else if (temp->next == NULL)
  235.     {
  236.         tail = tail->perv;
  237.         tail->next = NULL;
  238.         delete temp;
  239.     }
  240.     else
  241.     {
  242.         temp->perv->next = temp->next;
  243.         temp->next->perv = temp->perv;
  244.         delete temp;
  245.     }
  246. }
  247.  
  248. //lab function
  249. void doubleList::doubleDeleteByData(int value, doubleNode *&head, doubleNode *&tail)
  250. {
  251.     doubleNode *temp;
  252.     temp = head;
  253.     if (head == NULL)
  254.     {
  255.         cout << "Empty list\n";
  256.         return;
  257.     }
  258.     else
  259.     {
  260.         while (temp->data != value)
  261.         {
  262.             if (temp = NULL)
  263.             {
  264.                 cout << "The required position not found\n";
  265.                 return;
  266.             }
  267.             else
  268.             {
  269.                 temp = temp->next;
  270.             }
  271.         }
  272.     }
  273.     if (temp->next == NULL && temp->perv == NULL)
  274.     {
  275.         head = tail = NULL;
  276.         delete temp;
  277.     }
  278.     else if (temp == head)
  279.     {
  280.         head = head->next;
  281.         head->perv = NULL;
  282.         delete temp;
  283.     }
  284.     else if (temp->next == NULL)
  285.     {
  286.         tail = tail->perv;
  287.         tail->next = NULL;
  288.         delete temp;
  289.     }
  290.     else
  291.     {
  292.         temp->perv->next = temp->next;
  293.         temp->next->perv = temp->perv;
  294.         delete temp;
  295.     }
  296. }
Advertisement
Add Comment
Please, Sign In to add comment