Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Item{
  5.     Item *pPrev;
  6.     int data;
  7.     Item *pNext = nullptr;
  8.    
  9.     Item(int value){
  10.         pPrev = nullptr;
  11.         data = value;
  12.         pNext = nullptr;
  13.     }
  14. };
  15.  
  16. struct List{
  17.     Item *pHead = new Item(0);
  18.     Item *pTail = new Item(0);
  19.     int size;
  20.    
  21.     List(){
  22.         pHead->pNext = pTail;
  23.         pTail->pPrev = pHead;
  24.         size = 0;
  25.     }
  26.    
  27.     Item *get(int index){
  28.         int curInd = -1;
  29.         Item *pCurrent = pHead;
  30.         while(pCurrent != pTail && curInd != index){
  31.             curInd++;
  32.             pCurrent = pCurrent->pNext;
  33.         }
  34.         return pCurrent;
  35.     }
  36.    
  37.     Item *insert(int data, int index){
  38.         Item *newItem = new Item(data);
  39.        
  40.         Item *pPrevItem = get(index-1);
  41.         Item *pNextItem = pPrevItem->pNext;
  42.        
  43.         pPrevItem->pNext = newItem;
  44.         newItem->pPrev = pPrevItem;
  45.         newItem->pNext = pNextItem;
  46.         pNextItem->pPrev = newItem;
  47.        
  48.         size++;
  49.         return newItem;
  50.     }
  51.    
  52.     int remove(int index){
  53.         Item *pItem = get(index);
  54.         int data = pItem->data;
  55.        
  56.         Item *pPrevItem = pItem->pPrev;
  57.         Item *pNextItem = pItem->pNext;
  58.        
  59.         delete pItem;
  60.         pPrevItem->pNext = pNextItem;
  61.         pNextItem->pPrev = pPrevItem;
  62.        
  63.         size--;
  64.         return data;
  65.     }
  66.    
  67.     int popBack(){
  68.         return remove(count()-1);
  69.     }
  70.    
  71.     int popFront(){
  72.         return remove(0);
  73.     }
  74.    
  75.     int count(){
  76.         return size;
  77.     }
  78.    
  79.     Item *pushBack(int data){
  80.         return insert(data, count());
  81.     }
  82.    
  83.     Item *pushFront(int data){
  84.         return insert(data, 0);
  85.     }
  86.    
  87.     void swap(int ind1, int ind2){
  88.         if(abs(ind1-ind2) == 1){
  89.             Item *pItem1 = get(min(ind1, ind2));
  90.             Item *pItem2 = get(max(ind1, ind2));
  91.             Item *pPrevItem = pItem1->pPrev;
  92.             Item *pNextItem = pItem2->pNext;
  93.             pPrevItem->pNext = pItem2;
  94.             pNextItem->pPrev = pItem1;
  95.             pItem1->pPrev = pItem2;
  96.             pItem1->pNext = pNextItem;
  97.             pItem2->pPrev = pPrevItem;
  98.             pItem2->pNext = pItem1;
  99.         }else{
  100.             Item *pItem1 = get(ind1);
  101.             Item *pItem2 = get(ind2);
  102.             Item *pPrev1 = pItem1->pPrev;
  103.             Item *pPrev2 = pItem2->pPrev;
  104.             Item *pNext1 = pItem1->pNext;
  105.             Item *pNext2 = pItem2->pNext;
  106.             pPrev1->pNext = pItem2;
  107.             pPrev2->pNext = pItem1;
  108.             pNext1->pPrev = pItem2;
  109.             pNext2->pPrev = pItem1;
  110.             pItem1->pPrev = pPrev2;
  111.             pItem2->pPrev = pPrev1;
  112.             pItem1->pNext = pNext2;
  113.             pItem2->pNext = pNext1;
  114.         }
  115.     }
  116.    
  117.    
  118.     void print(){
  119.         Item *pCurrent = pHead->pNext;
  120.         while(pCurrent != pTail){
  121.             cout << pCurrent->data << endl;
  122.             pCurrent = pCurrent->pNext;
  123.         }
  124.     }
  125.    
  126.     void printBack(){
  127.         Item *pCurrent = pTail->pPrev;
  128.         while(pCurrent != pHead){
  129.             cout << pCurrent->data << endl;
  130.             pCurrent = pCurrent->pPrev;
  131.         }
  132.     }
  133. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement