Академический Документы
Профессиональный Документы
Культура Документы
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 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 =
0 1 2
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
Cola basada en antiguo), y back, que indica la posicin en la que
arreglo se agregar el prximo elemento.
Desencolar (dequeue):
- Incrementar la variable front: front = front +
1
struct Queue {
int v[MAX_SIZE];
int _front, _back;
Queue() {
v= v2 v3
_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
void enqueue(int value) { cola.enqueue(4); se ve limitado por el tamao del
v[_back] = value; cout<<cola.front()<<endl; //
_back++; 5 arreglo utilizado
}
void dequeue() { cola.dequeue();
_front++; cout<<cola.front()<<endl; //
} 4
};
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
Constructo
Apilar(push
r:
):
<<pila>>
2 _top 54 Node* nodo = new Node();
size=0 Puntero nodo->value = 54;
nulo nodo->next = _top;
<<pila>>
_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(p
):
op):
2 _top 54 top 54 Node* top = _top;
1 _top _top = _top->next;
<<pila>> delete(top);
<<pila>>
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 Algoritmo:
9 =4*2+
1 1. Mientras n > 0
4 =2*2+ 1. digitos.push(n mod 2)
0 2. n = n / 2
2 =1*2+ 2. Mientras pila.empty() ==
0 false
1 =0*2+ 1. imprimir(pila.top())
1 2. pila.pop()
19 = 100112
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 17
Implementacin de Cola: Usando lista enlazada
Cola basada en lista
21/11/2015 19
Arreglos Dinmicos
Podemos crear arreglos cuyo numero de elementos
no sea constante?
0
S, utilizando gestin dinmica de memoria! (dynamic
get(1) memory allocation)
1
Podemos crear una estructura con las siguientes
2
operaciones:
3
- Agregar (.add(x)): Agregar un elemento al final de la
add(x) x estructura
21/11/2015 20
Operador new[]
Reservar un bloque de memoria
El operador n ew [], usado del modo n ew tip o[n ], reserva un bloque de memoria con
espacio para n elementos de determinado tip o de datos. Retorna un puntero hacia el
primer elemento del bloque.
1. 2. Agregar
Constructo elemento:
r: ptr ptr
21/11/2015 22
Arreglo Dinmico
3.3. Eliminamos el
bloque antiguo y
3. Incrementar
actualizamos
capacidad:
referencias ptr
ptr ptrNuevo ptr ptrNuevo
12 12 12 12 0 12
0
3 3 3 3 3
1 37 37 37 37 1 37
2 56 56 56 56 2 56
3 99 99 99 99 3 99
El operador d elete[], usado del modo d elete[] p tr, libera el bloque de memoria
apuntado por el puntero p tr. La memoria liberada, ya no debe ser utilizada por el
puntero, puesto que puede ser utilizada por otra variable o programa.
in t* ptr1 = n ew in t[n];
d elete[] ptr1; // Liberar la memoria del bloque de n enteros
21/11/2015 24