Documente Academic
Documente Profesional
Documente Cultură
Las operaciones que se aplican sobre la pila son de tipo LIFO, es decir el ultimo elemento en salir
es el ultimo en ingresar
Soporta las funciones empty, size, top, push, y pop.
Empty: para verificar si la pila esta vacia o no
Size: tamaño de la pila
Top: Obtiene el tope de la pila
Push: inserta elemento en el tope de la pila
Pop: quita un elemento del tope de la pila
EJEMPLO EN C++
1 2
#include <iostream.h> stack<int>::size_type i;
#include <stack.h> //stack<int> i;
arreglos dinamicos(vectores)
colas(queue)
pilas(stack)
monticulos(priority_queue)
listas ligadas(list)
arboles(set)
arreglos asociativos(map)
#include <conio.h>
struct nodo {
DATA_TYPE data;
};
class DDqueue {
public:
// constructor
~DDqueue() {}
nodo *temp;
temp->data = valor;
items ++;
if (cabeza == NULL )
temp->next = NULL;
temp->prev = NULL;
cabeza = temp;
cola = temp;
} else
cola->next = temp;
temp->prev = cola;
cola = temp;
cola->next = NULL;
return valor;
}
/* agregar componente en la parte frontal de la lista */
nodo *temp;
temp->data = valor;
items ++;
if (cabeza == NULL )
temp->next = NULL;
temp->prev = NULL;
cabeza = temp;
cola = temp;
} else
cabeza->prev = temp;
temp->next = cabeza;
cabeza = temp;
cabeza->prev = NULL;
return valor;
DATA_TYPE get_front()
nodo *temp;
DATA_TYPE d;
items --;
d = cabeza->data;
temp = cabeza->next;
cabeza = temp;
return d;
DATA_TYPE get_back()
nodo *temp;
DATA_TYPE d;
items--;
d = cola->data;
temp = cola->prev;
cola = temp;
return d;
}
/* punto de prueba */
int main()
system("cls");
DDqueue s;
DATA_TYPE d;
// vaciando la lista
while ( ! s.empty())
cin.get();
return 0;
}
Ejemplo implementado utilizando las funciones de C++
Las operaciones que se aplican sobre la pila son de tipo LIFO, es decir el ultimo elemento en salir
es el ultimo en ingresar
Soporta las funciones empty, size, front, top, push, y pop.
Empty: para verificar si la pila esta vacia o no
Size: tamaño de la pila
Top: Obtiene el tope de la pila
Push: inserta elemento en el tope de la pila
Pop: quita un elemento del tope de la pila
PANTALLA 01 PANTALLA 02
#include <iostream.h> cout << "IMPRESION 01" << endl;
#include <deque.h> cout << endl;
return 0;
}
Cola de Prioridad
Una cola de prioridad (priority queue) es una estructura de datos muy similar a una lista pero
cada elemento tiene una prioridad asociada. En una cola de prioridad, el elemento con más alta
prioridad es manejado/procesado antes que un elemento de prioridad baja. Si existen dos
elementos con prioridades iguales, entonces se procesa de acuerdo al orden de la cola.
Una implementación usual es con un heap. (esto si quieren no lo mencionen dado que a nivel
conceptual son distintos!). Igualmente, la inserción dentro de una cola de forma ordenada, O(n), es
una opción válida para la explicación.
struct nodo
{
char dato;
int priori; // prioridad del nodo
struct nodo *sgte;
};
struct cola
{
nodo *delante;
nodo *atras ;
};
aux = q.delante;
aux1 = q.delante;
aux1->priori = aux2->priori;
aux1->dato = aux2->dato;
aux2->priori = p_aux;
aux2->dato = c_aux;
}
aux2 = aux2->sgte;
}
aux1 = aux1->sgte;
}
}
void menu()
{
cout<<"\n\t COLAS CON PRIORIDAD EN C++ \n\n";
cout<<" 1. ENCOLAR "<<endl;
cout<<" 2. MOSTRAR "<<endl;
cout<<" 3. SALIR "<<endl;
int main()
{
struct cola q;
q.delante = NULL;
q.atras = NULL;
do
{
menu(); cin>> op;
switch(op)
{
case 1:
insertar( q, c, pr );
case 2:
if(q.delante!=NULL)
muestraCola( q );
else
cout<<"\n\n\tCola vacia...!"<<endl;
break;
default:
cout<<"\n\tOpcion incorecta..!"<<endl;
system("pause");
exit(0);
}
cout<<endl<<endl;
system("pause"); system("cls");
}while(op!=3);
return 0;
}
Arreglos asociativos
Es una estructura de datos que almacena un par clave-valor (key-value), donde la clave
representa un identificador (generalmente único) y el valor consiste en el dato a almacenar.
También se conoce como map, tabla de símbolos ó diccionario. Un arreglo asociativo se
considera una colección donde siempre se añaden y remueven elementos del tipo clave-valor.
Igualmente, es posible modificar el valor de un elemento de la colección dada la clave. Así, existe
una forma de direccionamiento de una posición de la colección dada una clave (lookup).
Ejemplo en C++
//Declaramos estructura map que almacena una clave, valor
map<string, long> directorio;
Modify: Reemplaza el valor de uno de los pares (key,value) existentes en la colección, cambiando
el valor almacenado en cierto key. Los parámetros de está función son key y value.
Delete: Elimina el valor de uno de los pares (key,value) existentes en la colección. Solo requiere el
parámetro key.
PANTALLA01 PANTALLA02
map<string, long> directorio; if(directorio.find(name)!=directorio.end()){
directorio["C"]=3456789; cout << "El numero de telefono para " << name
map.erase(“C”); << " es " <<directorio[name] << "\n";
}else{
name="C"; cout << "No se encuentra el valor especificado " << name << "\n";
system("pause");
return 0;
}
Lookup: Busca el valor (si existe) que está asociado a cierto valor de key. El parámetro de esta
función es el valor de key y retorna value. Si no se encuentra un valor asociado, entonces deber
retornar un valor que indique nulo (o una excepción).
Ejemplo con map en C++ CON ESTRUCTURA MAP. DECIRLES QUE LO CORRAN.
#include<iostream>
#include<iostream> directorio["A"]=888; /*por la clave a almaceno el valor
#include<map> 1234567 (A,123567)*/
#include<string> name="A";
if(directorio.find(name)!=directorio.end()){
using namespace std; cout << "El numero de telefono para " << name
<< " es " <<directorio[name] << "\n";
int main(){ }
//estructura map que almacena una clave, valor //Operaciones de borrado sobre las listas
map<string, long> directorio;
//OPCION 1: Utilizando un iterador
map<string, long>::iterator it;
//seteamos algunos valores para la estructura directorio
de tipo map it=directorio.find("A");
directorio["A"]=1234567; /*por la clave a almaceno el directorio.erase(it);
valor 1234567 (A,123567)*/
directorio["B"]=9876543; /*almaceno de esta forma( if(directorio.find(name)!=directorio.end()){
B,9876543)*/ cout << "El numero de telefono para " << name
directorio["C"]=3456789; /*almaceno de esta forma( << " es " <<directorio[name] << "\n";
C,3456789)*/ }else{
cout << "No se encuentra el valor especificado " <<
string name="A"; name << "\n";
Existe otra estructura de datos que representa una generalización del arreglo asociativo llamada
multimap o multihash y permite que sea asociado más de un valor para una clave dada.
VER EJEMPLO DE MULTIMAP EN C++ (SIGUIENTE PÁGINA)
class Number{
char str[80];
public:
Number(){
strcmp(str, "");
}
Number(char *s){
strcpy(str,s);
}
char *get(){
return str;
}
};
Conjunto
Un conjunto (set) es un tipo de dato que almacena valores sin un orden en particular sin repetición. Un set es
la implementación matemática de un conjunto finito considerando sus operaciones (unión, intersección,
diferencia y subconjunto). Del mismo modo, la estructura de datos conjunto puede ser estática (inmutable) o
dinámica (mutable). La primera de éstas permite hacer consultas para un valor dado y determinar si
pertenecen o no a un conjunto. La segunda permite las mismas operaciones que la estática añadiendo
inserción y eliminación. Un conjunto puede ser de cualquier tipo de dato e implementado de forma contigua
en memoria (arreglos) o de forma dispersa (apuntadores). Las operaciones básicas de una estructura
conjunto se pueden resumir en: isEmpty, size, insert, delete, add y elementOf.
Ejemplo de Conjunto SET EN C++
#include<iostream> setStr.insert(s);
#include<set> s="R";
#include<string>
setStr.insert(s);
using namespace std; s="Toto";
setStr.insert(s);
int main(){
for(set<string>::const_iterator p=setStr.begin();
set<string> setStr; p!=setStr.end();p++)
string s="B"; cout << *p << endl;
setStr.insert(s); system("pause");
s="So"; }
Existe una estructura de datos llamada multiset o bag la cual es una generalización del tipo set. La diferencia
radica en que permite repetir valores. De esta forma, es posible considerar dos elementos iguales como un
solo elemento y manteniendo un contador de dicho elemento ó considerados equivalentes y almacenarlos de
forma distinta y única. Dependiendo de la implementación de conjunto, se pueden establecer relaciones de
equivalencia dentro de los conjuntos.
#include<iostream> call1.insert(1);
#include<algorithm> call1.insert(6);
#include<set> call1.insert(2);
#include<iterator> call1.insert(5);