Advertisement
Proff_Ust

queues_simple

Oct 26th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. #include <set>
  4.  
  5. using namespace std;
  6. struct TList//объявляем структуру для списка, в котором будет очередь
  7. {
  8.     int value;
  9.     TList* next;
  10.     TList* prev;
  11. };
  12.  
  13. struct TQueue
  14. {
  15.     TList* head;//указатель на голову
  16.     TList* tail;//и хвост
  17. };
  18.  
  19. void push(TQueue** q, int newValue)//функция для помещения newValue в очередь q
  20. {
  21.     if((*q)==NULL)
  22.     {
  23.         *q = new TQueue;
  24.         (*q)->head = NULL;
  25.         (*q)->tail = NULL;
  26.     }
  27.     TList * temp = new TList;//создаем новый элемент
  28.     temp->value = newValue;//заполняем поле value переданным значением
  29.     temp->next = (*q)->head;//присваиваем полю nex нового элемента текущую голову
  30.     temp->prev = NULL;//у головы предыдущего элемента нет - присваиваем NULL
  31.     if((*q)->head==NULL)//если очередь была до этго пуста
  32.         (*q)->tail = temp;//ставим указатель на хвост на тотже элемент
  33.     else
  34.         (*q)->head->prev = temp;//иначе присваиваем полю prev текущей голову созданный элемент
  35.     (*q)->head = temp;//перемещаем голову на новый элемент
  36. }
  37.  
  38. int pop(TQueue** q)//функция извлечения элемента из очереди
  39. {
  40.     int retValue;//воззвращаемое значение
  41.     TList * temp;//временная переменная для запоминания текущего хвоста
  42.     retValue = (*q)->tail->value;//запоминаем значение жлемента, на который указывает хвост
  43.     temp = (*q)->tail;//запоминаем текущий хвост
  44.     (*q)->tail = (*q)->tail->prev;//перемещаем хвост на один элемент назад
  45.     if((*q)->tail!=NULL)//если элемент не последний
  46.         (*q)->tail->next = NULL;//присваиваем полю next хвоста null
  47.     else
  48.         (*q)=NULL;//иначе обнуляем всю очередь
  49.     delete temp;//удаляем бывший хвост
  50.     return retValue;//возвращаем запомненное значение
  51. }
  52.  
  53. bool Task(TQueue* q)
  54. {
  55.     TList* temp = q->head;//запоминаем голву списка
  56.     TList* temp1 = NULL;//этой переменной будем ходить по списку
  57.     while(temp->next!=NULL)//пока не достигли предпоследнего элемента
  58.     {
  59.         temp1 = temp->next;//сравнение начинаем с элемента идущего за запомненным
  60.         while(temp1!=NULL)//пока не достигли конца списка
  61.         {
  62.             if(temp->value==temp1->value)//сравниваем занчения очередного элемента и запомненного
  63.                 return true;//если они равны - выходим из цикла и возвращаем истину
  64.             temp1 = temp1->next;//переходим к следующему элементу
  65.         }
  66.         temp = temp->next;//когда сравнили все элементы с запоменнеым, перемещаем его вперед
  67.     }
  68.     return false;//если не нашли ни одного одинакового эдлемента - возвращаем ложь
  69. }
  70.  
  71. int main()
  72. {
  73.     setlocale(0,"Russian");
  74.     TQueue* qOne = new TQueue;
  75.     qOne->head = NULL;
  76.     qOne->tail = NULL;
  77.     int inputValue;
  78.     cout<<"Введите очередь, окончание ввода -1 "<<endl;
  79.     cin>>inputValue;
  80.     do {
  81.         push(&qOne, inputValue);
  82.         cin>>inputValue;
  83.     } while(inputValue!=-1);
  84.  
  85.     if(Task(qOne))
  86.         cout<<"В очереди есть одинаковые элементы"<<endl;
  87.     else
  88.         cout<<"В очереди нет одинаковых элементов"<<endl;
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement