Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4.1. 2
3) A= ( ( a ) )
a a
4.1. 3
INFO=0 indica que nodo contiene dato en DATO. INFO=1 indica que nodo contiene en DATO un puntero a LISTA Ejemplos 1) A = ( ( a ) )
2) A = ( a, ( b, c) )
3) B = ( a, b, c )
4) Representar : C = ( ( a, b ), c )
4.1. 4
4.1.2 Ejemplo de aplicacin P( X, Y, Z ) = X10Y3Z2 + 2X8Y3Z2 + 3X8Y2Z2 + X4Y4Z + 6X3Y4Z + 2YZ Formato del nodo para un polinomio usando una lista con nexos tradicional
Desventaja Estos nodos tendrn que poder cambiar de tamao, dependiendo del nmero de variables. Uso de lista generalizada para representar el polinomio Reescribir P( X, Y, Z ) como: (( X10 + 2X8 ) Y3 + 3X8Y2 ))Z2 + ((X4 + 6X3 )Y4 + 2Y)Z Z coeficiente
n
exponente
Cada coeficiente es en s mismo un polinomio (en una variable menos) si consideramos un nico coeficiente numrico como un polinomio en variable cero.
4.1. 5
Cmo distinguimos entre coeficientes y un puntero a otra lista? La solucin es agregar otro campo llamado TAG: Ser cero si el campo contiene un coeficiente y Ser uno, de otra manera. Ejemplo El polinomio P = 3X2Y podra ser representado como:
4.1. 6
TAG es 1 en los nodos que contienen X e Y. Tambin permite distinguir entre un nombre de variable y una constante. Ejemplo P(x,y,z) = ((x10 + 2x8) y3 + 3x8y2) z2 + ((x4 + 6x3) y4 + 2y) z P(x,y,z)
1 z 0 1 2 1 1 0 1 4 1 x 0 1 y 0 1 3 1 2 0 0 3 8 0 1 1 x 0 0 1 44 1 0 0 2 0 0 0 6 3 0 1 y 0
1 x 0
1 x 0
0 1 10
0 2 8 0
link
link
var
ptr
P
var x 0
link
link
no
4.1. 7
Si trio == var, entonces el nodo es head de la lista. vble es utilizado para identificar el nombre de la variable. exp es 0. Si trio == ptr, entonces el coef es apuntador a otra lista. Si trio == no, entonces el coeficiente es un entero y es almacenado. mencionado. Formato del nodo tag = FALSE / TRUE dato / dLink Link En ambos casos, se coloca el exponente
class GenLista; //Definicin de clase class GenLista Nodo { friend class GenLista; private: GenListaNodo *Link; Bool tag; union { char dato; GenListaNodo *dLink; }; }; class GenLista { public: //Listado de mtodos de comportamiento private:
4.1. 8
}; Ejemplos: D= 0
GenListaNodo *primero;
A = (a, (b,c))
B = (A, A, ())
C = (a, C)
4.1. 9
4.1.3 Algoritmos Copiar una lista void GenLista::Copiar(const GenLista & L) { primero = Copiar(L.primero); } GenListaNodo* GenLista::Copiar(GenListaNodo *p) { GenListaNodo *q = 0; if (p) { q = new GenListaNodo; q tag = p tag; if (!p tag) q dato = p dato; else q dLink = Copiar (p dLink); q Link = Copiar (p Link); } }
4.1.10
Ejercicios propuestos: Un algoritmo para ver si dos listas son idnticas. Algoritmo para calcular la profundidad de una lista. La profundidad de una lista vaca es cero y en general: depth(s) 0 si S es tomo (x1, ..., xn), n 1 1 + max{depth(x), ..., depth(xn)} si S es la lista
4.1.4. Contador de referencias y caso de listas que son compartidas por otras listas
Ver Horowitz