Estructura de datos ejercicios
Pao AguilarExamen11 de Octubre de 2015
3.670 Palabras (15 Páginas)136 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:
public int contador se debe escribir +Entero contador.
Para privado y protegido se utilizan los signos – y # respectivamente.
4. Para las clases Pila, NodoArbol y todas las clases que se hicieron de tarea, (Carro, vocho, etc) clasifique las características y métodos según sea el caso.
Ejecute los siguientes códigos.
public class ValorPlantilla
private T valor;
public ValorPlantilla(T v){
valor = v;
}
public T traeValor(){
return valor;
}
}
public class ManejaPlantilla {
public static void main(String []args){
ValorPlantilla
ValorPlantilla
System.out.println("El valor es " + valint.traeValor());
System.out.println("El valor es " + valcad.traeValor());
}
}
5. Explique brevemente cómo funciona la idea de
Bueno en el programa
Y la plantilla la utilizamos como una librería para q al menejaplantilla se direcciones hacia plantilla y pueda ocupar
Consulte y haga un resumen de la siguiente página web: http://zarza.usal.es/~fgarcia/docencia/poo/02-03/trabajos/S3T1.pdf
1.1.¿Qué son tipos genéricos?
Los tipos genéricos, también llamados tipos parametrizados, permiten definir un tipo sin
especificar todos los tipos que éste usa. Estos serán suministrados como parámetros en punto de
instanciación. Los cambios son realizados por tanto en tiempo de compilación.
Los tipos parametrizados se utilizan especialmente para implementar tipos abstractos de
datos: pilas, colas, anillos, bolsas y otros que permiten almacenar distintos tipos de elementos
...