edutecnica

Esercizio 4                     

Realizzare una coda con priorità tramite la classe ArrayList.


La struttura di dati, deve, in questo caso funzionare sul modello della coda, tenendo conto della priorità di ogni singolo elemento. Pensiamo a 5 livelli di priorità (che vanno appunto da 1 a 5) il 5 è dunque il livello più elevato di importanza e sarà quello con maggiore capacità di inserimento (in profondità) nella coda. La funzione di estrazione (pop) rimane, invece invariata, rispetto ad una coda classica; cioè il primo elemento ad essere estratto è quello che si trova in testa alla coda e quindi avrà necessariamente il livello di priorità più alto. Usiamo la classe Q dotata degli attributi ele (stringa) e pri (intero) per istanziare gli elementi che poi verranno collezionati dall'arraylist che gestisce la struttura.

import java.io.*;
import java.util.ArrayList;
class codap { public static void main (String[] args)
throws IOException{

InputStreamReader input=new InputStreamReader(System.in); BufferedReader h= new BufferedReader(input);
char ch;
ArrayList L=new ArrayList(0);
do{
System.out.println("A]push");
System.out.println("B]pop");
System.out.println("S]stampa"); System.out.println("X]EXIT");
ch=h.readLine().trim().charAt(0);
ch=Character.toUpperCase(ch);
switch(ch){
case 'A':push(L);break;
case 'B':L.remove(0);System.out.println(L);break;
case 'S':System.out.println(L);break;
default:if(ch!='X')
       System.out.println("Opzione non valida") ; }
}while(ch!='X'); } //fine main

static void push(ArrayList T)throws IOException{
String s;
int i,n,k,j;
boolean trovato;

InputStreamReader input=new InputStreamReader(System.in); BufferedReader h= new BufferedReader(input);

do{
trovato=false;
System.out.print("elemento:");
s=h.readLine();
if(s.length()==0)break;
System.out.print("priorità:");
n=Integer.parseInt(h.readLine().trim());
Q q=new Q(s,n);
if(T.isEmpty()) T.add(q);
else{
     for(i=0;i < T.size();i++){
        k=((Q)T.get(i)).getPri();
        if(n > k){T.add(i,q);trovato=true;break;}
     }//fine for
if(trovato==false)T.add(q);
}//fine else
System.out.println(T);
}while(s.length()!=0);
}//fine push
} //fine classe codap

class Q {
private String ele;
private int pri;

public Q() {this("zero",1);}

public Q(String s,int j) {
if (j > 0 && j < 6 && s.length()!=0) {
     ele=s;
     pri = j;
} else {
     System.out.println("Errore");
     ele="zero";pri = 1; }
}

public String getEle() {return ele;}
public int getPri() {return pri;}
public String toString() {
      return getEle()+":"+getPri();
}//fine toString
}//fine classe Q