180 likes | 418 Views
Listas Contiguas. 3.1 Objetivos. El estudiante manejará el tad Lista Contigua, sobre memoria estática. 3.2 Temas a Cubrir. Definición Operaciones sobre listas Enlistar (enqueue) Desenlistar (dequeue) Primero (front) Último (rear) Vacía? (empty) Implementación de listas.
E N D
3.1 Objetivos • El estudiante manejará el tad Lista Contigua, sobre memoria estática 3
3.2 Temas a Cubrir • Definición • Operaciones sobre listas • Enlistar (enqueue) • Desenlistar (dequeue) • Primero (front) • Último (rear) • Vacía? (empty) • Implementación de listas 4
3.3 Definición • Una lista es una colección de elementos ordenada de acuerdo a las posiciones de éstos (secuencia, relación predecesor-sucesor) 5
0 a1 1 a2 Lista Campo elementos . . . n-1 an . . . Vacío max-1 -- Campo longitud Longitud de la lista n 6
3.4 Operaciones sobre listas • ObtenNodo (getnode) • LiberaNodo (freenode) • InsertaDespuesDe (insafter) • EliminaDespuesDe (delafter) 8
3.4.1 ObtenNodo (getnode) • Esta operación sirve para insertar un elemento e en la lista q • enqueue(Q, e) 9
3.4.2 LiberaNodo (freenode) • Se usa para retirar un elemento de la lista Q y asignarlo a una variable del mismo tipo que el tipo de los elementos de la lista • v = dequeue(Q); 10
3.4.3 InsertaDespuesDe (insafter) • La operación front(Q) devuelve el valor del primer elemento de la lista Q. • v=front(Q) 11
3.4.4 EliminaDespuesDe (delafter) • La operación rear(Q) devuelve el valor del último elemento de la lista Q. • v=rear(Q) 12
3.5 Implementación de Listas #define NUMNODES 500 struct nodetype { int info, next; }; struct nodetype node[NUMNODES]; 13
Inicialización: avail = 0; for (i = 0; i < NUMNODES-1; i++) node[i].next = i + 1; node[NUMNODES-1].next = - 1 ; 14
3.5.1 ObtenNodo (getnode) int getnode(void) { int p; if (avail == -1) { printf("overflow\n"); exit(l); } p = avail; avail = node[avail].next; return(p); } 15
3.5.2 LiberaNodo (freenode) void freenode(int p) { node[p].next = avail; avail = p; return; } 16
3.5.3 InsertaDespuesDe (insafter) void insafter(int p, int x) { int q; if (p == -1) { printf("insercion nula\n"); return; } q = getnode(); node[q].info = x; node[q].next = node[p].next; node[p].next = q; return; } 17
3.5.4 EliminaDespuesDe (delafter) void delafter(int p, int *px) { int q; if ((p == -1) || (node[p].next == -1)) { printf("eliminacion nula\n"); return; } q = node[p].next; *px = node[q].info; node[p].next = node[q].next; freenode(q); return; } 18
Tarea # 4 (entrega 10 marzo 2009) • Escriba un programa en C que guarde en una lista contigua los datos de varias personas (nombre y edad) de manera que los elementos de la lista se inserten de menor a mayor edad. 19