2. DEFINICIÓN
Las listas están formadas por una serie de
nodos; cada nodo tienen un campo de
información y un apuntador (puntero) al
siguiente nodo de la lista.
list
info(p) next(p)
nodo(p)
nil
3. OPERACIONES BÁSICAS
Una operación básica es la de obtener un nodo vacío.
Esta operación se denomina getnode. La operación
regresa un apuntador al nodo vacío.
La operación complementaria regresa un nodo al
sistema, esta operación es llamada freenode(p) y
libera el nodo apuntado por p.
4. OPERACIÓN PUSH
Push es simplemente el método por el cual va
agregando un Dato nuevo a la Pila tomando en cuenta
la Capacidad Máxima (Max) de almacenar un dato.
Detalle:
Compara en un principio el Top con Max, si la
condición no cumple es imposible insertar mas datos a
la Pila, de otra forma lo que hace es Incrementar el
valor de Top, y copia el valor de Elemento en
Pila[Top]. De esta forma el dato ya esta insertado.
LIST
P X
5. OPERACIÓN POP
Para retirar un elemento de la pila S y asignarlo a una
variable del mismo tipo que el tipo de los elementos de la
pila, usaremos la operación pop escribiéndola como:
v=pop(S);
En donde v es una variable que almacena el valor del
elemento que estaba en la cima de S. Hacer esta
operación tiene algunas implicaciones:
•La variable v debe ser del mismo tipo que los elementos
almacenados en la pila.
•Solamente se puede retirar un elemento de la pila a la
vez.
•Antes de la operación, e era el elemento en la cima,
ahora ya no lo es más. El apuntador ``cima'' decrece en
una unidad.
6. OPERACIÓN INSAFTER
Algoritmo para insertar un nodo después del
nodo P.
SUBRUTINA
INSAFTER(P:APUNTADOR,X:..)
1. Q ← GETNODE
2. INFO(Q) ← X
3. NEXT(Q) ← NEXT(P)
4. NEXT(P) ← Q
8. ALGORITMO DELAFTER
Algoritmo para eliminar el nodo después del nodo
P.
SUBRUTINA DELAFTER(P:APUNTADOR;X:..)
1. Q ← NEXT(P)
2. X ← INFO(Q)
3. NEXT(P) ← NEXT(Q)
4. FREENODE(Q)
10. ALGORITMO PARA LA CREACIÓN DE
UNA LISTA ORDENADA
SUBRUTINA PLACE(X:INFO; LIST:APUNTADOR)
1. FOUND ← FALSE
2. P ← LIST
3. Q ← NIL
4. MIENTRAS (P<>NIL) AND (NOT FOUND) HACER
a. SI X<=INFO(P) ENTONCES
1. FOUND ← FALSE
b. ELSE
1. Q ← P
2. P ← NODE[P].NEXT
5. SI Q=NIL ENTONCES
a. PUSH(LIST,X)
6. ELSE
b. INSAFTER(Q,X)
11. Representación de polinomios
Un polinomio en (x, y, z) puede
representarse como una lista.
En cada nodo se almacena el
exponente de cada variable y el valor
del coeficiente. Por tanto cada nodo
de la lista será un registro con los
campos: C - para el coeficiente y X,
Y, Z - para los exponentes de x, y, z
respectivamente.
12. FUNCION POLYINSERT(I:INFOTYPE;FIRST:NODEPTR)
REGRESA NODEPTR
1. SI FIRST=NIL ENTONCES
a. PUSH(I,FIRST)
2. SINO
a. A ← INFO(FIRST).X
b. B ← INFO(FIRST).Y
c. C ← INFO(FIRST).Z
d. SI (A < I.X) OR ((A=I.X)AND(B<I.Y)) OR
((A=I.X) AND (B=I.Y) AND (C<I.Z)) THEN
1. PUSH(I,FIRST)
e. SINO
1. S ← FIRST
2. FOUND ← FALSO
ALGORITMO DE INSERCIÓN EN POLINOMIO
13. 3. MIENTRAS (NEXT(S)<>NIL) AND (NOT FOUND)
HACER
a. Q ← NEXT(S)
b. A ← INFO(Q).X
c. B ← INFO(Q).Y
d. SI (A < I.X) OR ((A=I.X)AND(B<I.Y)) OR
((A=I.X) AND (B=I.Y) AND (C<I.Z)) ENTONCES
1. S ← NEXT(S)
e. SINO
1. INSAFTER(S,I)
2. FOUND ← VERDADERO
3. SI NOT FOUND ENTONCES
a. INSAFTER(S,I)
4. REGRESA FIRST
ALGORITMO DE INSERCIÓN EN POLINOMIO
CONTINUACIÓN