daily pastebin goal
40%
SHARE
TWEET

Untitled

a guest May 16th, 2018 91 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<conio.h>
  4. #include <iostream>
  5.  
  6. //#include "stdafx.h"
  7.  
  8. using namespace std;
  9.  
  10. struct mylist//структура-звено списка
  11. {
  12.     int x;//значение передается в список
  13.     mylist *prev, *next;//указатели на адреса предыдущ и следующего
  14. };
  15. class List//создаем тип данных Список
  16. {
  17.     mylist *Head, *Tail;//указатель на первый и последний элемент списка
  18.     int size;//переменная,отв за размер
  19. public:
  20.     List() :Head(NULL), Tail(NULL) {};//инициализируем адреса как пустые (положили ноль)
  21.     ~List();//ссылка на деструктор
  22.     void Show();
  23.     void Add(int x);
  24.     void push_front(int);
  25.     int pop_front();
  26.     void push_back(int data);
  27.     int pop_back();
  28.     int Size();
  29.     void split(List &, int choise);
  30.     void merge(List, List, List &);
  31.     void Clear();
  32.     int Resize(int choise);
  33.  
  34. };
  35. List::~List()
  36. {
  37.     while (Head!=NULL)
  38.     {
  39.         Tail = Head->next;//резервная копия следующего элемента списка
  40.         delete Head;//очистка первого элемента
  41.         Head = Tail;//смена адреса начала на адрес след элемента
  42.     }
  43. }
  44. void List::Add(int x)
  45. {
  46.     mylist *temp = new mylist;//выделение памяти под повый элемент сттуктуры
  47.     temp->next = NULL;//изначально адрес след элемента 0
  48.     temp->x = x;
  49.     size++;
  50.     if (Head != NULL)
  51.     {
  52.         temp->prev = Tail;
  53.         Tail->next = temp;
  54.         Tail = temp;
  55.     }
  56.     else
  57.     {
  58.         temp->prev = NULL;
  59.         Head = Tail = temp;
  60.     }
  61.  
  62. }
  63.  
  64. void List::Show()//выводим эхлементы с конца
  65. {
  66.     mylist *temp1 = Head;//на новой белой карточке пишем хвост
  67.     while (temp1 != NULL)
  68.     {
  69.         cout << temp1->x << endl;
  70.         temp1 = temp1->next;
  71.     }
  72. }
  73.  
  74. int  List::Size()
  75. {
  76.     int y;//счетчик карточек
  77.     mylist* temp2 = Head;//наложим наш  шаблон на первую карточку
  78.     while (temp2 != NULL)//пока наш шаблон не наткнется на ноль
  79.     {
  80.     ++y;
  81.     temp2 = temp2->next;//передвигаем шаблон
  82.     }
  83.     return y;
  84. }
  85.  
  86. int List::Resize(int choise)//choise кол-во элементов,которое мы хотим выкинуть
  87. {
  88.     mylist* temp3 = Head;
  89.     for (int i=0; i<choise; i++)//до тех пор пока ... выкидываем
  90.     {
  91.         temp3 = Head->next;//резервная копия следующего элемента списка
  92.         delete Head;//очистка первого элемента
  93.         Head = temp3;//смена адреса начала на адрес след элемента
  94.     }
  95.  
  96. }
  97.  
  98. //очистить список (скопированна прога конструктор)
  99.  
  100. void List::Clear()
  101. {
  102.  
  103.     while (Head!=NULL)
  104.     {
  105.         Tail = Head->next;//резервная копия следующего элемента списка
  106.         delete Head;//очистка первого элемента
  107.         Head = Tail;//смена адреса начала на адрес след элемента
  108.     }
  109. }
  110.  
  111. // перед head кладем еще одну карточку
  112.  
  113. void List::push_front(int data)// data то ,что кладем в x
  114. {
  115.     size++;//размер списка увеличили на одну позицию
  116.     mylist* temp = new mylist; //берем новый шаблон
  117.     temp->x = data;
  118.     if (Head != NULL)
  119.     {
  120.         temp->next = Head;
  121.         Head->prev = temp;
  122.         Head = temp;
  123.     }
  124.     else//если наша карточка первая
  125.     {
  126.         temp->prev = NULL;
  127.         temp->next = NULL;
  128.         Head = Tail = temp;
  129.     }
  130. }
  131. // Удаляет карточку, находящийся в начале списка и он выдает на экран что он удалил
  132. int List::pop_front()
  133. {
  134.     if (Head != NULL)
  135.     {
  136.         int t = Head->x;//берем х из головы и приравниваем к т
  137.         mylist* temp = Head;// скопировали информацию о голове в новую карточку
  138.         Head = temp->next;//переместили голову на одну позицию вперед
  139.         delete[] temp;// удалили бывшую первую карточку
  140.         size--;
  141.         return t;//вывели значение бывшего первого элемента
  142.  
  143.     }
  144. }
  145. // Вставляет объект как нижний элемент дека
  146. void List::push_back(int data)
  147. {
  148.     size++;
  149.     mylist* temp = new mylist;
  150.     if (Head != NULL)
  151.     {
  152.         mylist* Tail = new mylist;
  153.         for (mylist*i = Head; i != NULL; i = i->next){
  154.             if (i->next == NULL)
  155.                 Tail = i;
  156.         }
  157.         Tail->next = temp;
  158.         temp->prev = Tail;
  159.         Tail = temp;
  160.     }
  161.     else
  162.     {
  163.         temp->prev = NULL;
  164.         temp->next = NULL;
  165.         Head = Tail = temp;
  166.     }
  167. }
  168. // Удаляет и возвращает объект, находящийся в конце дека
  169. int List::pop_back()
  170. {
  171.     if (Head)
  172.     {
  173.         mylist* Tail = new mylist;
  174.         for (mylist*i = Head; i != NULL; i = i->next){
  175.             if (i->next == NULL)
  176.                 Tail = i;
  177.         }
  178.         int t = Tail->x;
  179.         mylist* temp = Tail;
  180.         Tail = temp->prev;
  181.         Tail->next = NULL;
  182.         delete[] temp;
  183.         size--;
  184.         return t;
  185.     }
  186. }
  187. //функция кторая объединяет два списка
  188. void List::merge(List l1, List l2,List& l3)
  189. {
  190.     mylist *temp1, *temp2;//mylist-тип шаблона,названия шаблонов
  191.     temp1 = l1.Head;//temp 1= голова первого списка
  192.     temp2 = l2.Head;//temp 2= голова второго списка
  193.  
  194.     int dat;//переменная для хранения инф о карточке
  195.     if (temp1==NULL && temp2 == NULL) cout<<"NULL"<<endl;
  196.     while(temp1!=NULL)//пока шаблоны не утыкаются в пустоту
  197.     {
  198.  
  199.             dat = temp1->x;
  200.             l3.Add(dat);//в список 3 добавили x из первго шаблона
  201.             temp1 = temp1->next;//прогнали все карточки 1 списка
  202.  
  203.     }
  204.     while (temp2!=NULL)
  205.     {
  206.             dat = temp2->x;
  207.             l3.Add(dat);
  208.             temp2 = temp2->next;
  209.     }
  210.  
  211.  
  212. }
  213. //функция разделения на два списка
  214.  
  215. void List::split(List& l2, int choice)//choice-сколько элементов будет в одном из списков
  216. {
  217.     mylist *temp1 = new mylist;//первую пустую карточку наполняем данными из Head
  218.     mylist *temp2 = new mylist;
  219.     if (Head == NULL)
  220.     {
  221.         cout<<"No data for splitting" <<endl;
  222.         return;//выбросит из функции
  223.     }
  224.     int dat;
  225.     for (int i = 0; i < choice; i++)
  226.     {
  227.         dat = Head->x;
  228.         l2.Add(dat);
  229.         Head = Head->next;
  230.     }
  231. }
  232.  
  233.  
  234. int main()
  235. {
  236.     //system("CLS");
  237.     List d;
  238.     d.Add(100);
  239.     d.Add(1000);
  240.     d.Add(200);
  241.     d.Add(400);
  242.     List l;
  243.     d.split(l, 1);
  244.     List k;
  245.     List m;
  246.     //k.Add(1);
  247.     //k.Add(2);
  248.     //k.Add(3);
  249.     //k.Add(4);
  250.     /*k.push_back(3);
  251.     k.push_back(4);
  252.     k.push_front(5);
  253.     k.push_front(6);*/
  254.     //m.merge(d, k,m);
  255.     d.Show();
  256.     l.Show();
  257.     k.~List();
  258.     m.~List();
  259.     d.~List();
  260. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top