Академический Документы
Профессиональный Документы
Культура Документы
21/11/2015 1
Qu es una Pila?
Tambin conocida como Stack, es un tipo de datos abstracto que
acta como coleccin de elementos y soporta las siguientes
operaciones:
21/11/2015 2
Qu es una Cola?
Tambin conocida como Queue, es un tipo de datos abstracto que
acta como coleccin de elementos y soporta las siguientes
operaciones:
21/11/2015 3
Pila vs Cola
21/11/2015 4
Implementacin de Pila: Usando arreglos
Apilar (push):
v= v0 v1
- Guardar el nuevo elemento en la posicin size
- Incrementar variable de tamao size: size = size + 1
0 1 2
Tope (top):
size - Retornar el elemento en la posicin size - 1
Desapilar (pop):
- Reducir variable de tamao size: size = size - 1
21/11/2015 5
Implementacin de Pila: Usando arreglos
#include <iostream>
struct Stack {
int v[MAX_SIZE];
int size;
v= v0 v1
21/11/2015 6
Implementacin de Cola: Usando arreglos
Se mantienen dos variables: front, que indica el ndice del
primer elemento de la cola (ms antiguo), y back, que indica la
posicin en la que se agregar el prximo elemento.
Cola basada en arreglo
Inicialmente front = 0 y back = 0
v= v2 v3 Encolar (enqueue):
- Guardar el nuevo elemento en la posicin back
0 1 2 3 4 - Incrementar variable back: back = back + 1
Frente (front):
front back - Retornar el elemento en la posicin front
Desencolar (dequeue):
- Incrementar la variable front: front = front + 1
Tamao (size):
- Retornar size = back - front
21/11/2015 7
Implementacin de Cola: Usando arreglos
#include <iostream>
using namespace std;
struct Queue {
int v[MAX_SIZE];
int _front, _back; v= v3
Queue() {
v2
_front = 0;
_back = 0; 0 1 2 3 4
} int main() {
bool empty() { Queue cola;
int size = _back - _front;
return size == 0; if(cola.empty()) { front back
} cout<<"Cola vacia"<<endl;
int front() { }
return v[_front];
} cola.enqueue(5); Desventaja: El tamao mximo se ve
void enqueue(int value) { cola.enqueue(4); limitado por el tamao del arreglo utilizado
v[_back] = value; cout<<cola.front()<<endl; // 5
_back++;
} cola.dequeue();
void dequeue() { cout<<cola.front()<<endl; // 4
_front++;
} return 0;
}; }
21/11/2015 8
Lenguaje de Programacin Estructurado
TIPOS DE DATOS ABSTRACTOS: PILAS Y COLAS
BASADAS EN LISTAS ENLAZADAS
21/11/2015 9
Implementacin de Pila: Usando lista enlazada
Pila basada en lista
Cantidad de Puntero a - Nodo (Node): Contiene el valor o valores propios del nodo y
elementos nodo siguiente un puntero al nodo siguiente.
99
<<nodo>> Apilar: Insertar un nuevo nodo en el tope
Puntero a
nodo tope Tope: Retornar el elemento del nodo tope
21/11/2015 10
Implementacin de Pila: Usando lista enlazada
Pila basada en lista
Constructor:
Apilar(push):
<<pila>>
2 _top 54 Node* nodo = new Node();
size=0 Puntero nulo nodo->value = 54;
<<pila>> nodo->next = _top;
_top = nodo;
size++;
Tope(top): 19
1 _top 19
<<nodo>>
<<pila>>
return _top->value;
21/11/2015 11
Implementacin de Pila: Usando lista enlazada
Pila basada en lista
Apilar(push):
Desapilar(pop):
19
19
21/11/2015 12
Implementacin de Pila: Usando lista enlazada
#include <iostream> struct Stack {
Node* _top;
using namespace std; int size;
Stack() {
struct Node { _top = NULL;
int value; size = 0;
Node* next; }
}; bool empty() {
return size == 0;
}
int top() {
return _top->value;
}
int main() {
void push(int value) {
Stack pila;
Node* nodo = new Node();
nodo->value = value;
if(pila.empty()) {
nodo->next = _top;
cout<<"Pila vacia"<<endl;
_top = nodo;
}
size++;
}
pila.push(5);
void pop() {
pila.push(4);
Node* top = _top;
cout<<pila.top()<<endl; // 4
if(size > 0) {
_top = _top->next;
pila.pop();
delete(top);
cout<<pila.top()<<endl; // 5
size--;
}
return 0;
}
21/11/2015 } 13
};
Ejemplo 1: Convertir de base 10 a base 2
19 = 9 * 2 + 1
9=4*2+1 Algoritmo:
4=2*2+0
2=1*2+0 1. Mientras n > 0
1=0*2+1 1. digitos.push(n mod 2)
2. n = n / 2
19 = 100112 2. Mientras pila.empty() == false
1. imprimir(pila.top())
2. pila.pop()
21/11/2015 14
Ejemplo 2: Notacin Polaca Inversa
Inventada en 1954 para evaluar expresiones de manera rpida minimizando el uso de
memoria del computador. Implementada en mltiples calculadoras de la poca. No requiere
el uso de parntesis.
54+ 9
54+3* 27
54+32** 54 Equivalente a (5 + 4) * (3 * 2)
Algoritmo:
21/11/2015 16
Ejemplo 2: Notacin Polaca Inversa
21/11/2015 17
Implementacin de Cola: Usando lista enlazada
Cola basada en lista
21/11/2015 18
Lenguaje de Programacin Estructurado
TIPOS DE DATOS ABSTRACTOS:
ARREGLOS DINMICOS
21/11/2015 19
Arreglos Dinmicos
Podemos crear arreglos cuyo numero de elementos no sea constante?
S, utilizando gestin dinmica de memoria! (dynamic memory allocation)
0
get(1) Podemos crear una estructura con las siguientes operaciones:
1
- Agregar (.add(x)): Agregar un elemento al final de la estructura
2
21/11/2015 20
Operador new[]
Reservar un bloque de memoria
El operador new[], usado del modo new tipo[n], reserva un bloque de memoria con espacio para n
elementos de determinado tipo de datos. Retorna un puntero hacia el primer elemento del bloque.
ptr ptr
21/11/2015 22
Arreglo Dinmico
3.3. Eliminamos el
bloque antiguo y
3. Incrementar capacidad:
actualizamos referencias
3 99 99 99 99 3 99
21/11/2015 23
capacity = 8
Operador delete[]
Liberar un bloque de memoria
El operador delete[], usado del modo delete[] ptr, libera el bloque de memoria apuntado por el
puntero ptr. La memoria liberada, ya no debe ser utilizada por el puntero, puesto que puede ser utilizada
por otra variable o programa.
21/11/2015 24