Aktywne Wpisy

SarahC +7
Mirki, mam dzisiaj urodziny i zastanawiam się co by sobie kupić z tej okazji dobrego do jedzonka

Badmanek +346
Zawsze fajnie się czyta wpisy osób, które sympatyzują z rosją. Jakie to musi być dla nich ciężkie, że muszą teraz pisać o Tym jak Putin się zemści, jak to Ukraińska ofensywa nic nie da.
Przypomnę wam, że 901 dni temu zaczął się ten spektakl upokorzenia dla rosji.
Ta cała potęga okazała się gówno warta i rosja okazała się być naga
Napadli
Przypomnę wam, że 901 dni temu zaczął się ten spektakl upokorzenia dla rosji.
Ta cała potęga okazała się gówno warta i rosja okazała się być naga
Napadli





Hejka mirki, mam na algorytmach zaimplementować harmonogram procesora, z sortowaniem procesów według priorytetów. Wyczytałem, że najlepszym sposobem żeby to osiągnąć jest zbudowanie wielopoziomowej kolejki ze sprzężeniem zwrotnym. Problemem jest to, że nie mogę zmieniać nagłówków, które dostaliśmy ani korzystać z STL. Mam kilka pytań odnośnie tego zadania.
1. Czy istnieje szansa w sposób który nie ignoruje tego co już tam jest, zaimplementowania wielopoziomowej kolejki? (widzę to tak że schduler jest kolejką kilku kolejek, ale jako że węzły mają wartości takie jak ID czy value, nie mam pomysłu jak to napisać)
2. Prosiłbym o naprowadzenie na to jak wykonać jakieś wydajne sortowanie po priorytecie. Może quick sort? Czy wymagane jest robienie sortowania na tymczasowej kolejce, czy jest możliwość posortowania wewnątrz starej?
3. Dlaczego waszym zdaniem funkcja nodeDequeue jest wirtualna? W jaki sposób sugerowalibyście jej użycie
Przepraszam za zajmowanie waszego czasu, ale wszystkie zasoby na które trafiłem odnoszą się do STL. Wołam @kuhwa bo też ci się to pewnie przyda xD. Kod poniżej
#include
using namespace std;
class Node
{
public:
Node(int value, Node* nextptr = nullptr, Node* prevptr = nullptr, int currentpriority = 0)
{
this->value=value;
next = nextptr;
prev = prevptr;
priority = currentpriority;
}
int getVal(void)
{
return value;
}
Node* getNext(void)
{
return next;
}
Node* getPrev(void)
{
return prev;
}
void setVal(int value)
{
this->value = value;
}
void setPrev(Node* prevptr)
{prev = prevptr; };
void setNext(Node* nextptr)
{
next = nextptr;
}
int getPriority(void)
{
return priority;
}
void setPriority(int priority)
{
this->priority = priority;
}
private:
Node* next;
Node* prev;
int priority;
int value;
};
class Stack
{
public:
Stack(void)
{
top = nullptr;
}
~Stack(void)
{
while (NodePop() != nullptr);
}
void Push(int value)
{
Node* tmp = new Node(value,top);
top = tmp;
}
Node* NodePop(void)
{
Node* tmp = top;
if (top != nullptr) top = top->getNext();
return tmp;
}
int Pop(void)
{
Node* tmp = NodePop();
int ret = 0;
if (tmp != nullptr)
{
ret = tmp->getVal();
}
else
{
throw "Stack Empty";
}
delete tmp;
return ret;
}
private:
Node* top;
};
class Queue
{
public:
Queue(void)
{
back = front = nullptr;
}
~Queue(void)
{
while (NodeDequeue() != nullptr);
}
void Enqueue(int i, int priority = 0)
{
Node* tmp = new Node(i, back, nullptr, priority);
back = tmp;
if (front == nullptr) front = back;
else
{
tmp = back->getNext();
tmp->setPrev(back);
}
}
int Dequeue(void)
{
Node* tmp = NodeDequeue();
int ret = 0;
if (tmp != nullptr)
{
ret = tmp->getVal();
}
else
{
throw "Queue Empty";
}
if (front == nullptr) back = front; // queue now empty
delete tmp;
return ret;
}
protected:
Node* back;
Node* front;
private:
virtual Node* NodeDequeue(void)
{
Node* tmp = front;
if (front != nullptr)
{
front = front->getPrev();
if (front != nullptr) front->setNext(nullptr);
}
return tmp;
}
};
class Scheduler : public Queue
{
public:
private:
Node* NodeDequeue(void);
};
to jest projekt na zaliczenie. Musimy używać nagłówków które dostaliśmy i dostosować kod do wymogów.
Komentarz usunięty przez autora