Estructura de datos ejercicios
Enviado por Pao Aguilar • 11 de Octubre de 2015 • Examen • 3.670 Palabras (15 Páginas) • 102 Visitas
PRIMER EXAMEN PARCIAL
2. Modifique el programa de Pila y Operadores para que maneje paréntesis,
class Pila{
String []cad;
private int prioridad;
int p;
int tope;
public Pila(){
tope = 0;
cad = new String[15];
prioridad = p;
}
public int traePrioridad(){
return prioridad;
}
public void mete(String c){
cad[tope] = c;
tope++;
}
public String saca(){
tope--;
return cad[tope];
}
public boolean esVacia(){
if (tope == 0){
return true;
}
else{
return false;
}
}
public String esTope(){
if (!esVacia()){
return cad[tope-1];
}
else {
return null;
}
}
}
public class Operadores {
Pila pila = new Pila();
private int prioridad(char c){
switch(c){
case '+': case '-': return 0;
case 'x': case '/': return 1;
case '^': return 2;
default : return 99;
}
}
private void trabajar(String []args){
int prio = 0;
if(args.length%2!=0){
for(int i=0;i
if(args[i].charAt(0) == '('){
prio += 10;
}else if(args[i].charAt(0) == ')'){
prio -= 10;
}
else{
if(pila.esVacia()){
pila.mete(args[i]);
} else{
while(!pila.esVacia() &&
prioridad(args[i].charAt(0))<=prioridad(pila.esTope().charAt(0))){
System.out.print(pila.saca());
}
pila.mete(args[i]);
}
}
}
while(!pila.esVacia()){
System.out.print(pila.saca());
}
}
}
public static void main(String []args){
Operadores op = new Operadores();
op.trabajar(args);
}
}
3. Modifique el programa NodoArbol y Arbol para que realice las operaciones con números enteros.
public class NodoArbol {
private int val;
private int prioridad;
public NodoArbol hijoIzquierdo, hijoDerecho;
public NodoArbol(int v, int p){
val = v;
prioridad = p;
hijoIzquierdo = hijoDerecho = null;
}
public int traeValor(){
return val;
}
public int traePrioridad(){
return prioridad;
}
public void escribe(){
System.out.print(val + " ");
}
}
public class Arbol {
public NodoArbol raiz;
public Arbol(){
raiz = null;
}
private NodoArbol creaLista2(NodoArbol r, NodoArbol m){
NodoArbol aux = r;
if(r==null){
r=m;
}
else{
while(aux.hijoDerecho!=null){
aux = aux.hijoDerecho;
}
aux.hijoDerecho = m;
m.hijoIzquierdo = aux;
}
return r;
}
private int prioridad(char c){
switch(c){
case '+': case '-': return 0;
case 'x': case '/': case 'm': return 1;
case 'p': return 2;
default : return 99;
}
}
private NodoArbol lista2Arbol(NodoArbol r){
NodoArbol aux = r;
while(aux.hijoDerecho != null){
aux = aux.hijoDerecho;
}
while(aux != null){
if(aux.traePrioridad()
r = aux;
}
aux = aux.hijoIzquierdo;
}
if(r.hijoIzquierdo != null){
r.hijoIzquierdo.hijoDerecho = null;
r.hijoIzquierdo = lista2Arbol(r.hijoIzquierdo);
}
if(r.hijoDerecho != null){
r.hijoDerecho.hijoIzquierdo = null;
r.hijoDerecho = lista2Arbol(r.hijoDerecho);
}
return r;
}
private void recorridoPreOrden(NodoArbol p){
if(p != null){
p.escribe();
recorridoPreOrden(p.hijoIzquierdo);
recorridoPreOrden(p.hijoDerecho);
}
}
private void recorridoPosOrden(NodoArbol p){
if(p != null){
recorridoPosOrden(p.hijoIzquierdo);
recorridoPosOrden(p.hijoDerecho);
p.escribe();
}
}
private void recorridoInOrden(NodoArbol p){
if(p != null){
recorridoInOrden(p.hijoIzquierdo);
p.escribe();
recorridoInOrden(p.hijoDerecho);
}
}
private void trabaja(String []args){
NodoArbol nuevo;
int prio = 0;
if(args.length>0 && args.length%2 != 0){
for(int i=0;i
if(args[i].charAt(0) == '('){
prio += 10;
}else if(args[i].charAt(0) == ')'){
prio -= 10;
}/*else{
nuevo = new NodoArbol(args[i],prioridad(args[i].charAt(0))+prio);
raiz = creaLista2(raiz, nuevo);
}*/
}
raiz = lista2Arbol(raiz);
recorridoInOrden(raiz);
System.out.println();
recorridoPreOrden(raiz);
System.out.println();
recorridoPosOrden(raiz);
System.out.println();
}
}
public static void main(String []args){
Arbol miArbol = new Arbol();
miArbol.trabaja(args);
}
}
En UML para indicar si una característica o un método va a tener el nivel de encapsulamiento público se utiliza un signo + por ejemplo:
...