Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / var09 my / 04

.cpp
Скачиваний:
24
Добавлен:
30.04.2013
Размер:
2.72 Кб
Скачать
#include <stdio.h>
#include <conio.h>
#include <math.h>

class Object
{
public:
	Object(void) { m_pNext = NULL; data = 0; }
	Object(int value) { m_pNext = NULL; data = value; }
	Object(Object &src) { m_pNext = NULL; data = src.data; }
	~Object(void) { m_pNext = NULL; data = 0; }

	int GetData(void) { return data; }
	void SetData(int value) { data = value; }

	inline Object operator=(const Object &a) { data = a.data; return data; }

	Object *m_pNext;

private:
	int data;
};

class Queue
{
public:
	Queue() { m_pFirstObject = NULL; m_pLastObject = NULL; }
	~Queue() { RemoveAllObjects(); };

	void AddObject(Object *pObject);
	void RemoveObject(Object *pObject);
	void RemoveAllObjects(void);
	void PrintObjects(void);
	Object *FindObjectByValue(int value);

private:
	Object *m_pFirstObject;
	Object *m_pLastObject;
};

void Queue::AddObject(Object *pObject)
{
	if (pObject)
	{
		printf("Queue: adding object: %d\n", pObject->GetData());
		if (m_pFirstObject)
		{
			if (m_pLastObject)
				m_pLastObject->m_pNext = pObject;

			m_pLastObject = pObject;
			if (!m_pFirstObject->m_pNext)
				m_pFirstObject->m_pNext = m_pLastObject;
		}
		else
			m_pFirstObject = pObject;
	}
}

void Queue::RemoveObject(Object *pObject)
{
	Object *pObj = m_pFirstObject;
	Object *pLast = NULL;

	while (pObj)
	{
		if (pObj == pObject)
		{
			if (pLast)
			{
				pLast->m_pNext = pObj->m_pNext;
				delete pObj;
				pObj = pLast->m_pNext;
			}
			else
			{
				m_pFirstObject = pObj->m_pNext;
				delete pObj;
				pObj = m_pFirstObject;
			}
		}
		else
		{
			pLast = pObj;
			pObj = pObj->m_pNext;
		}
	}
}

void Queue::RemoveAllObjects(void)
{
	printf("Queue: removing all objects\n");
	Object *pObj = m_pFirstObject;
	Object *pNext = NULL;

	while (pObj)
	{
		pNext = pObj->m_pNext;
		printf("Queue: deleting object: %d\n", pObj->GetData());
		delete pObj;
		pObj = pNext;
	}

	m_pFirstObject = NULL;
}

void Queue::PrintObjects(void)
{
	Object *pObj = m_pFirstObject;
	int i=0;
	while (pObj)
	{
		printf("Object %d: value %d\n", i, pObj->GetData());
		pObj = pObj->m_pNext;
		i++;
	}
}

Object *Queue::FindObjectByValue(int value)
{
	Object *pObj = m_pFirstObject;
	while (pObj)
	{
		if (pObj->GetData() == value)
			return pObj;

		pObj = pObj->m_pNext;
	}
	return NULL;
}

void main()
{
	Object *pObj = NULL;
	Queue q;

	for (int i=1; i < 10; i++)
	{
		pObj = new Object(20*i);
		q.AddObject(pObj);
		pObj = NULL;
	}

	q.PrintObjects();

	int a = 0;
	printf("Enter search value: ");
	scanf("%d", &a);
	pObj = q.FindObjectByValue(a);
	if (pObj)
		printf("Found!\n");

	getch();
}
Соседние файлы в папке var09 my