Advertisement
myloyo

2св списки

May 25th, 2023 (edited)
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. ifstream in("input.txt");
  7. ofstream out("output.txt");
  8.  
  9. template <class Item> class DoublList {
  10.     struct Node {
  11.         Item data;
  12.         Node* prev;
  13.         Node* next;
  14.         Node(Item x) : data(x), next(0), prev(0) {}
  15.     };
  16.     Node* head;
  17.     Node* tail;
  18.     int size;
  19.     Node* Find(int index) {
  20.         Node* cur = head;
  21.         for (int i = 0; i < index; i++) {
  22.             cur = cur->next;
  23.         }
  24.         return cur;
  25.     }
  26.  
  27. public:
  28.     DoublList() {
  29.         head = NULL;
  30.         tail = NULL;
  31.     }
  32.  
  33.     bool empty() {
  34.         return head == 0;
  35.     }
  36.     int GetLength() {
  37.         return size;
  38.     }
  39.     Node Get(int index) {
  40.         Node* r = Find(index);
  41.         Item i = r->data;
  42.         return i;
  43.     }
  44.     void insertAtHead(string value) {
  45.         Node* newNode = new Node();
  46.         newNode->data = value;
  47.         newNode->prev = NULL;
  48.         newNode->next = head;
  49.  
  50.         if (head != NULL) {
  51.             head->prev = newNode;
  52.         }
  53.         else {
  54.             tail = newNode;
  55.         }
  56.  
  57.         head = newNode;
  58.         size++;
  59.     }
  60.  
  61.     void insertAtTail(string value) {
  62.         Node* newNode = new Node(value);
  63.  
  64.         if (tail != NULL) {
  65.             tail->next = newNode;
  66.         }
  67.         else {
  68.             head = newNode;
  69.         }
  70.  
  71.         tail = newNode;
  72.         size++;
  73.     }
  74.  
  75.     void deleteAtHead() {
  76.         if (head != NULL) {
  77.             Node* temp = head;
  78.  
  79.             if (head == tail) {
  80.                 head = NULL;
  81.                 tail = NULL;
  82.             }
  83.             else {
  84.                 head = head->next;
  85.                 head->prev = NULL;
  86.             }
  87.  
  88.             delete temp;
  89.         }
  90.     }
  91.  
  92.     void deleteAtTail() {
  93.         if (tail != NULL) {
  94.             Node* temp = tail;
  95.  
  96.             if (head == tail) {
  97.                 head = NULL;
  98.                 tail = NULL;
  99.             }
  100.             else {
  101.                 tail = tail->prev;
  102.                 tail->next = NULL;
  103.             }
  104.  
  105.             delete temp;
  106.         }
  107.     }
  108.  
  109.     void printList() {
  110.         Node* current = head;
  111.  
  112.         while (current != NULL) {
  113.             out << current->data << " ";
  114.             current = current->next;
  115.         }
  116.  
  117.         cout << endl;
  118.     }
  119. };
  120.  
  121. int main()
  122. {
  123.     DoublList <string> k, m;
  124.     string value;
  125.     while (in >> value) {
  126.         k.insertAtTail(value);
  127.         if (value.length() == 1) {
  128.             k.insertAtTail(value);
  129.         }
  130.     }
  131.     in.close();
  132.    
  133.     k.printList();
  134.     return 0;
  135. }
  136. aarrarar
  137. r
  138. t
  139. base
  140. baza
  141. h
  142. pp
  143.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement