Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <clocale>
- #include <set>
- using namespace std;
- struct TList//объявляем структуру для списка, в котором будет очередь
- {
- int value;
- TList* next;
- TList* prev;
- };
- struct TQueue
- {
- TList* head;//указатель на голову
- TList* tail;//и хвост
- };
- void push(TQueue** q, int newValue)//функция для помещения newValue в очередь q
- {
- if((*q)==NULL)
- {
- *q = new TQueue;
- (*q)->head = NULL;
- (*q)->tail = NULL;
- }
- TList * temp = new TList;//создаем новый элемент
- temp->value = newValue;//заполняем поле value переданным значением
- temp->next = (*q)->head;//присваиваем полю nex нового элемента текущую голову
- temp->prev = NULL;//у головы предыдущего элемента нет - присваиваем NULL
- if((*q)->head==NULL)//если очередь была до этго пуста
- (*q)->tail = temp;//ставим указатель на хвост на тотже элемент
- else
- (*q)->head->prev = temp;//иначе присваиваем полю prev текущей голову созданный элемент
- (*q)->head = temp;//перемещаем голову на новый элемент
- }
- int pop(TQueue** q)//функция извлечения элемента из очереди
- {
- int retValue;//воззвращаемое значение
- TList * temp;//временная переменная для запоминания текущего хвоста
- retValue = (*q)->tail->value;//запоминаем значение жлемента, на который указывает хвост
- temp = (*q)->tail;//запоминаем текущий хвост
- (*q)->tail = (*q)->tail->prev;//перемещаем хвост на один элемент назад
- if((*q)->tail!=NULL)//если элемент не последний
- (*q)->tail->next = NULL;//присваиваем полю next хвоста null
- else
- (*q)=NULL;//иначе обнуляем всю очередь
- delete temp;//удаляем бывший хвост
- return retValue;//возвращаем запомненное значение
- }
- bool Task(TQueue* q)
- {
- TList* temp = q->head;//запоминаем голву списка
- TList* temp1 = NULL;//этой переменной будем ходить по списку
- while(temp->next!=NULL)//пока не достигли предпоследнего элемента
- {
- temp1 = temp->next;//сравнение начинаем с элемента идущего за запомненным
- while(temp1!=NULL)//пока не достигли конца списка
- {
- if(temp->value==temp1->value)//сравниваем занчения очередного элемента и запомненного
- return true;//если они равны - выходим из цикла и возвращаем истину
- temp1 = temp1->next;//переходим к следующему элементу
- }
- temp = temp->next;//когда сравнили все элементы с запоменнеым, перемещаем его вперед
- }
- return false;//если не нашли ни одного одинакового эдлемента - возвращаем ложь
- }
- int main()
- {
- setlocale(0,"Russian");
- TQueue* qOne = new TQueue;
- qOne->head = NULL;
- qOne->tail = NULL;
- int inputValue;
- cout<<"Введите очередь, окончание ввода -1 "<<endl;
- cin>>inputValue;
- do {
- push(&qOne, inputValue);
- cin>>inputValue;
- } while(inputValue!=-1);
- if(Task(qOne))
- cout<<"В очереди есть одинаковые элементы"<<endl;
- else
- cout<<"В очереди нет одинаковых элементов"<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement