Sunteți pe pagina 1din 22

Estructura de Datos En C++

Dr. Romeo Snchez Nigenda. E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacn Horas de Tutora: 10am-11am Martes y Jueves, 3:30pm-4:30pm Mircoles, 2:00pm-4:00pm Viernes. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48 * Slides aumentados con informacin de Dr. Roger Ros, y Dr. Fernando Lpez

Objetivo General: Conocer y manejar las estructuras internas de informacin


Temario:
1. 2. 3.

4.
5. 6. 7.

8.
9.

Conceptos Bsicos La Pila 40% Tareas Colas 30% Examen Recursin Parcial Listas 30% Examen Final 10% Participacin rboles Ordenamiento Bsqueda Administracin de Almacenamiento

Total a calificar: 110 puntos.

Material de apoyo:
Estructura de Datos con C y C++. Yedidyah Langsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn College Segunda Edicin, Prentice-Hall. Algorithms. Third Edition. Parts 1-4, Fundamentals Data Structures Sorting Searching Robert Sedgewick. Estructura de Datos. Romn Martnez, Elda Quiroga. Thomson Learning.

Software:

Cualquier libro de Estructura de Datos! Compiladores GCC (GNU Compiler Collection) IDEs (Integrated Development Environment): http://www.eclipse.org/downloads/ http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

Repaso C/C++

C/C++ tiene pocos tipos bsicos de datos: enteros (int y derivados), nmeros de punto flotante (float, double), caracteres (chars). El tipo de datos de una variable especifica dos cosas: La cantidad de almacenamiento a reservar La forma de interpretar los datos representados por las cadenas de bits Ya que usamos bits para representarlos, los rangos de los valores en enteros, y la precisin en punto flotante depende de la implementacin en el hardware de la mquina. Cuando ejecutamos una operacin con algn tipo de dato debemos asegurarnos que los operandos y los resultados son del tipo correcto. Usamos Casting para convertir explcitamente entre tipos.

Tipos de datos primitivos en C/C++


Type char, bool (en C++) (unsigned) short (unsigned) int, long float 8 16 32 32 Tamao (bits) bajo i386 (GCC)

double

64

Variable: Es el medio por el cual se hace referencia a una localidad de memoria en la que se almacena informacin (datos).
Declaracin: type var1; type var1_new , var2, var333; type var1=value, var2_, var3_01=value; Ejemplos: char _b, c=c; double y, x, z_2 = 78.0098;

Ms sobre variables en C/C++

Prdida de datos (data loss): double x = 3; //OK (int -> double), implcito int n = 3.7; //Warning: compilador convierte a enteros, pero se pierden datos fraccionales Conversin forzada: Casting. (static, dynamic, const, reinterpret)_cast<type> int n = static_cast<int> (3.7); //OK

Expresiones (expr) en C/C++

Expresin (expr):
constante | variable expr op expr Op expr

Aritmticas
Operadores: +, -, *, /, %

Ejemplos
x+ 3 x+y+z (x + 7) / 3 * y 14 % 3 - (x * 3) % 4 Y = ++x Y = x++ Especiales (op =): x +=4, y/=x; t*=5;

Expresiones (expr) en C/C++

De comparacin (True, False)


Operadores: ==, !=, <, >, <=, >= Ejemplos:
1<1 x == x x<x 3 != 4

Expresiones Lgicas
Operadores: !, ||, && C usa enteros (0, 1) C++ usa bool (false, true,) Ejemplos:
! 2 \\ value es 0 ! (x == (x +1)) \\ value es 1 (x == 0) || (x !=0) \\ siempre es 1 (x == x) && (1!=2) \\ value es 1 1 || (x == y) \\ (x == y) no se evala

Expresiones (expr) en C/C++

De Seleccin
Expr1 ? Expr2 : Expr3 El resultado es expr2 si expr1 es true, o Expr3 si expr1 es falso Ejemplos:
0 ? Y : z //value es z 1? 10 : 13 //value es 10 A ? B : 9 //value es B if A is true, 9 de otra manera

Statements (sentencias) en C/C++

Simples
Null Expresin (expr) If While Do For Switch

Compuestas { }

Statements (sentencias) en C/C++

If, if-else
If (expr) statement1 If (expr) statement1 else statement2 Ejemplos:
If(a==1) x +=4; If (y!=x+5) {
x+=1;

} else {
y -=1;

Ejercicio: Identifica si un nmero es par o

Statements (sentencias) en C/C++

while
while (expr) statement(s) Ejemplo:
int i=1, N; cout<<Dame N: ; cin >> N; while (i<N){ cout << i: <<i++; }

Cul es el mnimo nmero de iteraciones para while? Ejercicio: Imprime los nmeros de N a 1.

Statements (sentencias) en C/C++

Do

do statement while (expr) Ejemplo:


int i = 1; cout<<Dame N: ; cin >> N; do{ cout << i: <<i++; }while(i<N);

Cul es el mnimo nmero de iteraciones?

Statements (sentencias) en C/C++

for
for(expr1;expr2;expr3) statement(s)
Las tres expresiones son opcionales Expr1 es el inicializador, evaluada solamente una vez Expr2 es la condicin, evaluada en cada iteracin que rompe el ciclo Expr3 se evala despus de que el cuerpo del for se ejecuta

Ejemplo:
For(i = 1; i<N; i++){ cout << i: ; } Cul es el mnimo nmero de iteraciones?

Statements (sentencias) en C/C++

break: Causa la terminacin del ciclo que lo contenga Ejemplos: int i=1; int limite; cin>>limite; while(true){ if(i==limite) break; i++; }

Statements (sentencias) en C/C++

Continue: avanza inmediatamente a la siguiente iteracin del ciclo Ejemplo: for(i=0;i<100<i++){ if(i%2 ==1) continue; cout<<Valor de i: <<I; }

Statements (sentencias) en C/C++ Switch: Estructura de seleccin

Switch (expr) { case constant1: statement (s); break; default: statement (s); } Ejemplo:
Int opcion;

cin>>opcion; switch (opcion){ case 1: cout<<Opcion 1; break; case 2: cout<<Opcion 2; break; default: cout<<Oprimiste una opcin no vlida. }

Repaso C/C++

Apuntadores: Son variables que contienen direcciones de memoria.


Una variable x precedida del operando & devuelve la direccin de la variable en lugar de su contenido. &x se denomina un apuntador.

int x = 6; cout<< x <<endl; cout<< &x <<endl;

6
[1234]
Es posible declarar una apuntador, y cuyos valores sean intvariable *y = &x; direcciones de memoria.

[1234]

Repaso C/C++

Apuntadores: Son variables que contienen direcciones de memoria.


Para acceder al contenido de la direccin referenciada por una variable apuntador se utiliza Siguiendo el asterisco el *. ejemplo:

x 6 y [1234]

Cul es el valor actual de *y?


Y despus de la modificacin: *y = 8; y=? x=?

Repaso C/C++

Operaciones con apuntadores:


Incremento y decremento:

? y = y - 1;

[96]

6
y = y + 1; ?

[100]

[104]

Cmo obtenemos el contenido de la direccin en y + 1?

Repaso C/C++

Ejercicio:
[1234]

x 10 5 y [4567] 5 10

0: #include 1: int main(){ 2: int x=5, y=10, temp; 3: int *pi; 4: cout<<T1: El valor de x es <<x<<endl; 5: cout<<T2: El valor de y es <<y<<endl; 6: pi = &x; 7: temp = *pi; 8: *pi = y; 9: y = temp; 10: cout<<T3: El valor de x es <<x<<endl; 11: cout<<T4: El valor de y es <<y<<endl; 12: cout<<T5: La direccin de pi es pi<<endl; 13: cout<<T6: El contenido de pi es *pi<<endl; 14: return 0;

temp
[8901] 5 pi [5432] 1234

Repaso C/C++: Funciones

Type function_name(argument_list) statement(s)

Paso de parmetros a funciones:


Por valor: Los valores que se pasan se copian a los parmetros de la funcin cuando se invoca. Si el valor de un parmetro se altera dentro de la funcin, el valor en el programa que lo llama no se modifica. int x = 0; cout<<x = <<x<<endl; incrementa(x); Cout<<x= <<x<<endl; Int incrementa(int param){ return ++param; } Por Referencia: Permite modificar el valor de la variable que se pasa a la funcin, si se pasa la direccin de la misma.

int x = 0; incrementa(&x); Cout<<x= <<x<<endl;


void incrementa(int *param){ ++(*param); }