bisogna implementare una funzione che elimini le priorità trasformando la struttura dati in base all'ordine di arrivo considerando anche degli elementi già inseriti in coda.
Bisogna togliere le priorità basta!
se hai una variabile priorità la azzeri tutto qui.
Non è difficile se si mantiene un contatore sui nodi e si fa un sorting discendente.
ti piace renderti la vita difficile?
struct ELEMENT
{
int comando,
int priorita;
}
struct ELEMENT pila[100];
int pcount = 0;
void empyprio()
{
int i;
for ( i = 0; i <pcount; ++i ) pila[i].priorita = 0;
}
in alternativa,come sembra volere il testo dell'esercizio, invece di azzerare la priorità la si copia in in una nuova pila che conterrà la nuova struttura senza priorità, tutta questa operazione può essere fatta in diversi modi, usando una lista invece che un vettore e magari creare l'elemento con un parametro un puntatore void che conterrà a seconda dei casi o la struttura con la priorità oppure no. In questo modo dovremmo gestire solo un tipo di pila e non due.
Ovviamente è facoltativo, il mio era solo un consiglio ci mancherebbe altro. Che sia facilmente inseribile ho dei dubbi, nel senso che andrebbe riscritto l'adt.
ecco cosa dovresti inserire nel frammento del codice sopra citato:
//indicizzo il primo elemento con priorità bassa
#ifdef PRIOHEAP
int priolow = 0;
#endif
void push(int comando, int priorita)
{
int i;
int fl = 0;
if (priorita == LOW)
{
#ifdef PRIOHEAP
fl = priolow
#else
for(fl = 0; fl < pcount; ++fl)
if (pila[i.]priorita = LOW ) break;
#endif
}
#ifdef PRIOHEAP
else
{
++priolow;
}
#endif
for(i = pcount; i > fl; --i)
{
pila[i].comando = pila[i-1].comando;
pila[i.]priorita = pila[i-1].priorita;
}
pila[0].comando = comando;
pila[0].priorita = priorita;
++pcount;
}
qesto è solo un semplicissimo esempio per farti vedere le piccole modifiche al codice da fare...
Naturalmente si potrebbe usare anche uno stack normale con inserimento dal fondo o ancora piu semplicemente una lista che richiederebbe meno sforzo per l'inserimento dei dati all'interno della pila stessa.In quest'ultimo caso naturalmente prioheap sarebbe di tipo struct ELEMENT*.
Non volendo dare della pappa pronta ho quindi ritenuto di postare l'esempio sul caso meno probabilmente usato.