Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Resumen punteros1

405 views

Published on

  • Be the first to comment

  • Be the first to like this

Resumen punteros1

  1. 1. Repaso de Punteros en C++: A continuación se repasan brevemente los pasos a seguir para usar punteros en C++. En general, primero se define el tipo correspondiente, después se declaran las variables y se les pide memoria. Posteriormente se hace el uso que se quiera con ellas y cuando no se necesitan se borran para reaprovechar el espacio. Ejemplo Paso Tipos Básicos Estructuras struct Tcomplex { double p_r; double p_i; }; typedef Tcomplex *TPComplex; typedef int *TPInt; óDefinición del Tipo typedef char *TPChar; typedef struct Tcomplex *TPComplex; struct Tcomplex { double p_r; double p_i; }; Declaración de TPInt p_int; TPComplex p_complex; varibles TPChar p_char; p_int = new(int); p_char = new(char); p_complex = new(Tcomplex); Petición de memoria (y if((p_int == NULL) || if(p_complex == NULL) comprobación de (p_char == NULL)) {que la ha asignado) { cout << “No hay memoria” << endl; cout << “No memoria”; } } Acceso I: *p_int = 7; p_complex->p_r = 4.6; Modifición cin >> *p_char; Acceso II: cout << *pint; parte_img = p_complex->p_i; Consulta un_char = *p_char; delete(p_int); Borrado delete(p_char); delete(p_complex); Listas Enlazadas en C++: Repaso breve sobre las listas enlazadas. Declaración del Tipo: typedef ... Tdatos; typedef ... Tdatos; struct Tnodo typedef struct Tnodo *Tlista; { struct Tnodo Tdatos datos; { Tnodo *sig; Tdatos datos; }; Tnodo *sig; typedef Tnodo *Tlista; };
  2. 2. Definición de la Variable: Basura Tlista primero; primeroInicialización de la Lista: Tlista crear() { return NULL; NULL } ... primero primero = crear();Insertar Ordenado: 1. Crear Nodo a insertarvoid insertar(Tlista &l, Tdato d){ Tlista paux; paux = new(Tnodo); if(paux == NULL) { d NULL cout << “ERROR”; } paux else { paux->dato = d; paux->sig = NULL; } 2. Si la lista es vacía introducimos al principio: NULL if( l == NULL ) { l => l l = paux; } d NULL d NULL paux paux 3. Si no es vacía comprobamos si hay que añadir al principio: e … e … if( l.dato > d ) { paux->sig = l; l => l l = paux; d NULL d } paux paux
  3. 3. 4. Insertamos en medio a b e …/* Creamos un puntero auxiliar lpara buscar la posición dondeinsertar */pbusca = l; d NULL pbusca paux/* Recoremos la lista buscando a b e …donde insertar */while( (pbusca->sig != NULL) && l (pbusca->sig->datos < d)){ d NULL pbusca = pbusca->sig;} pbusca paux a b e …/* Una vez encontrada la posición linsertamos el nuevo nodo */paux->sig = pbusca->sig;pbusca->sig = paux; d pbusca pauxBorrar: Borrar es similar a la insertar. Primero se comprueba si es vacía, en tal caso nohacemos nada. Si no está vacía buscamos el elemento que queramos borrar, y una vezlocalizado, lo sacamos de la lista y liberamos la memoria que tenía asignada- 1. Borrado del primer elemento if(l->dato == d) { ptr = l; l = l->sig; delete(ptr); } d e ... => d e ... l l ptr ptr
  4. 4. 2. Borrado de un elemento intermedio/* Creamos dos punteros a b d e …auxiliares uno que examine laposición actual y otro que lindique la posición anterior*/pact = l->sig;pant = l; pant pact/* Recoremos la listabuscando el nodo a borrar*/ a b d e …while((pact != NULL) && l (pact->dato != d)){ pant = pact; pact = pact->sig;} pant pact/* Una vez encontrada laposición borramos el nodo */ a b d e …if(pact != NULL){ l pant->sig = pact->sig; delete(pact);} pant pact

×