Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <assert.h>
- #include <iostream>
- class CQueueOnList {
- public:
- CQueueOnList();
- ~CQueueOnList();
- // Добавление элемента в очередь.
- void Enqueue( int value );
- // Извлечение из очереди. Если очередь пуста, возвращает -1.
- int Dequeue();
- private:
- // Элемент односвязного списка.
- struct CListNode {
- int Data;
- CListNode* Next;
- CListNode( int data ) : Data( data ), Next( 0 ) {}
- };
- CListNode* head; // Голова очереди. Указывает на первый элемент списка. 0, если очередь пуста.
- CListNode* tail; // Хвост очереди. Указывает на последний элемент списка.
- };
- CQueueOnList::CQueueOnList() :
- head( 0 ),
- tail( 0 )
- {
- }
- CQueueOnList::~CQueueOnList()
- {
- while( head != 0 ) {
- CListNode* next = head->Next;
- delete head;
- head = next;
- }
- }
- void CQueueOnList::Enqueue( int value )
- {
- if( tail == 0 ) {
- assert( head == 0 );
- tail = new CListNode( value );
- head = tail;
- } else {
- assert( head != 0 );
- tail->Next = new CListNode( value );
- tail = tail->Next;
- }
- }
- int CQueueOnList::Dequeue()
- {
- if( head == 0 ) {
- assert( tail == 0 );
- // Очередь пуста.
- return -1;
- }
- assert( tail != 0 );
- const int value = head->Data;
- CListNode* toDelete = head;
- // Подвинем head вперед. Он мог стать равным 0, если элемент был последним.
- head = head->Next;
- delete toDelete;
- if( head == 0 ) {
- tail = 0;
- }
- return value;
- }
- int main()
- {
- std::cout << ( sizeof( int ) == sizeof( int* ) ? "equal" : "not equal" );
- int requestsCount = 0;
- std::cin >> requestsCount;
- CQueueOnList queue;
- for( int i = 0; i < requestsCount; ++i ) {
- int requestType = 0;
- int requestValue = 0;
- std::cin >> requestType >> requestValue;
- switch( requestType ) {
- case 2:
- if( queue.Dequeue() != requestValue ) {
- std::cout << "NO";
- return 0;
- }
- break;
- case 3:
- queue.Enqueue( requestValue );
- break;
- default:
- assert( false );
- }
- }
- std::cout << "YES";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement