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

Лабы / var09 my / 04

.doc
Скачиваний:
26
Добавлен:
30.04.2013
Размер:
31.74 Кб
Скачать

Лабораторная работа №4

Востропятов Н. А.

Вар №9

Очередь на основе линейного однонаправленного списка с указателями на начало и конец очереди.

#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();

}

3

Соседние файлы в папке var09 my