SlideShare una empresa de Scribd logo
1 de 34
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA NÚCLEO FALCÓN - EXTENSIÓN PUNTO FIJO Apuntadores / Estructura de datos lineales Docente: Licda. Marialix Quintero Punto Fijo, Mayo de 2011
Una de las aplicaciones más interesantes y potentes de la memoria dinámica y los punteros son las estructuras dinámicas de datos. Las estructuras básicas disponibles en C y C++ tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. Los arreglos están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable sea creado. En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa. Por supuesto, podemos hacer 'arrays' dinámicos, pero una vez creados, tu tamaño también será fijo, y para hacer que crezcan o diminuyan de tamaño, deberemos reconstruirlas desde el principio, por este motivo los arrays no hacen un uso eficiente de la memoria.
OBJETIVOS ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Punteros o apuntadores
Punteros o apuntadores (Direcciones en memoria) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Ox4f f fd34 n int
Ejemplo: Hacer un programa muestre por pantalla el valor y la dirección de una variable x de tipo entero. #include <stdio.h> void main() { int n = 75; cout<<”el valor de n es: ”<<n;  cout<<”la dirección de memoria de n es: ”<<&n; }  Ojo: la dirección viene dada en hexadecimal Punteros o apuntadores (Direcciones en memoria)
L as variables vistas hasta este momento contienen valores de datos, por el contrario las variables punteros contienen valores que son direcciones de memoria donde se almacenan datos. En resumen, un puntero es una variable que contiene una dirección de memoria, y utilizando punteros su programa puede realizar muchas tareas que no sería posible utilizando tipos de datos estándar. Punteros o apuntadores (Definición) Puntero= variable  dirección de memoria  dirección de memoria de otra variable = Puntero a punta a otra variable
Cuando se telefonea a una persona, se utiliza un puntero (el número de teléfono que se marca).  Punteros o apuntadores (Ejemplos) Cuando se envía una carta por correo, su información se entrega basada en un puntero que es la dirección de esa carta. Así   pues, una dirección de correos y un número de teléfono tienen en común que ambos indican dónde encontrar algo.
Punteros o apuntadores (Ventajas y desventajas) ,[object Object],[object Object],[object Object],Ventajas Los punteros deben usarse con precaución, ya que pueden provocar fallos en el programa difíciles de localizar, puede ser por asignación incorrecta de dirección.   Desventajas
Los tipos de datos tienen que corresponderse es decir (declaración de variable de tipo de dato).  Los punteros se enlazan a tipos de datos específicos, de modo que C verificará si se asigna la dirección de un tipo de dato al tipo correcto de puntero.  Así,  por ejemplo, si se define un puntero a float, no  se  le puede asignar la dirección de un carácter o un entero.  Por ejemplo, este segmento de código no  funcionará: Ejemplo: float *fp; char c; fp = &c; / * no es válido * / Existen dos operadores especiales de punteros:  & y *.  El operador de dirección  (&)  devuelve la dirección de memoria de su operando. El operador de indirección  (*)  devuelve el contenido de la dirección apuntada por el operando. Punteros o apuntadores (Ventajas y desventajas)
Inicialización Ejemplos de Asignación estática de memoria void main(){ int a; int* b; b = &a;         //El puntero 'b' apunta a 'a'. } Punteros o apuntadores (Declaración e inicialización) Declaración tipo_de_dato *nombre_var_puntero ej: int *punt; float *nuevo;
Existen dos tipos de punteros especiales muy utilizados en el tratamiento de sus programas: los punteros void y null (nulo). Un  puntero nulo  no apunta a ninguna parte -dato válido- en particular, es decir, «un puntero nulo no direcciona ningún dato válido en memoria». Un puntero nulo se utiliza para proporcionar a un programa un medio de conocer cuando una variable puntero no direcciona a un dato válido. Para declarar un puntero nulo se utiliza la macro NULL, definida en los archivos de cabecera STDEF . H, STDIO. H, STDLIB. H y STRING. H. Se debe incluir uno o más de estos archivos de cabecera antes de que se pueda utilizar la macro NULL. Ejemplos: char *p = NULL; Estático nuevo->sig=NULL; Dinámico En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato específico.  En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato específico. El método es declarar el puntero como  un puntero void *, denominado puntero genérico.  Punteros o apuntadores (Punteros Null y void)
[object Object],[object Object],[object Object],Listas lineales
Las estructuras dinámicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas. Pero no sólo eso, también nos permitirá crear estructuras de datos muy flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los elementos que las componen.  Las estructuras de datos están compuestas de otras pequeñas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajará nuestro programa y además uno o más punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo.  Una estructura básica de un nodo para crear listas de datos seria: struct nodo { int dato;  struct nodo *sig; }; Listas lineales (Definición)
Tipos de listas Simples Circulares Doble ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],Lista simple o abierta
[object Object],[object Object],[object Object],[object Object],[object Object],Lista simple o abierta (Operaciones con listas) Inicialización:   inicio=NULL; Insertar Caso 1: Lista Vacía El proceso es muy simple, bastará con comprobar si la lista==NULL: nuevo->siguiente apunte a NULL.  Lista apunte a nuevo.  Código if (inicio==NULL){ nuevo=new nodo; nuevo->dato=elem; nuevo->sig=NULL; inicio=nuevo; } 10  NULL
Caso 2: Insertar un elemento en la primera posición de la lista (menor que el 1er elemento) El proceso sigue siendo muy sencillo: Hacemos que nodo->siguiente apunte a Lista.  Hacemos que Lista apunte a nodo.  Lista simple o abierta (Operaciones con listas) Código: else if (elem<=inicio->dato){ nuevo=new nodo; nuevo->dato=elem; nuevo->sig=inicio; inicio=nuevo; } 10  NULL 5  sig 10  50
Caso 3: Insertar un elemento después de un nodo cualquiera de la lista Procedimiento Recorrer la lista e ir guardando el anterior cuando se encuentre la posición correcta, el anterior debe apuntar al nuevo nodo y el nuevo->siguiente a la posición siguiente del anterior. Lista simple o abierta (Operaciones con listas) else {  aux=inicio; while (aux!=NULL){ if (elem<aux->dato) break; ant=aux; aux=aux->sig; } nuevo=new nodo; nuevo->dato=elem; ant->sig=nuevo; nuevo->sig=aux; } 10  NULL 5  sig Aux=10-50 Elem=7 Ant=10 7  NULL 10  50  20  5  sig 10  7  sig 20  10  NULL 50
Recorrer / Mostrar void mostrar() { nodo *aux; aux=inicio; while(aux!=NULL){ cout<<&quot;&quot;<<aux->dato<<&quot;&quot;; aux=aux->sig;} aux=lista;} Lista simple o abierta (Operaciones con listas) 5  sig 10  7  sig 20  10  NULL 50
Buscar / Eliminar:  Se debe recorrer la lista buscando el elemento a borrar, tomando en cuenta su posición en la lista: si es el primer elemento, el último o esta en el medio. void eliminar(int elem) { aux=inicio; while (aux!=NULL){   if (elem==aux->dato) break; ant=aux; aux=aux->sig; }//while if(aux==NULL) cout<<&quot;elemento no encontrado&quot;; else{ if (aux==inicio)//primer elemento inicio=aux->sig; else if (aux->sig==NULL)//ultimo ant->sig=NULL; else ant->sig=aux->sig; delete(aux);} } Lista simple o abierta (Operaciones con listas) 5  sig 10  7  sig 20  10  NULL 50  Aux=10-20 Elem=7 Ant=10
Cuerpo del programa Librería:  #include <iostream.h> void main(){ int op; while (op<4) {  cout<<&quot;Listas Dinamicas - Menu Principal&quot;;   cout<<&quot;1.Insertar&quot;;   cout<<&quot;2.Eliminar&quot;;   cout<<&quot;3.Mostrar&quot;;   cout<<”4.Salir&quot;;   cout<<&quot;Seleccione una opcion: &quot;;  cin>>op;   int dat;     switch (op){   case 1: { cout<<&quot;Dato: &quot;;   cin>>dat;   insertar(dat);   break;  }   case 2:  { cout<<&quot;Dato: &quot;;   cin>>dat; eliminar(dat);   break;}   case 3:{   mostrar();   break; }   } } } Lista simple o abierta (Operaciones con listas)
Ejercicios propuestos de listas simple ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Lista doble (Operaciones con listas) 5  sig 10   ant void mostrar(){ aux=inicio; if (aux==NULL) cout<<&quot;Lista Vacia&quot;; while(aux!=NULL){ cout<<aux->elem<<&quot;&quot;; aux=aux->sig; } } Inicio 4  Sig 10 Ant Null 5  Sig 80 Ant 20 20   8  Sig null Ant 80 10   50   8  Sig 50 Ant 10 80
void insertar(){ int dato; nuevo=new nodo; cout<<&quot;Ingrese numero: &quot;; cin>>dato; nuevo->elem=dato; if (inicio==NULL){//lista vacia nuevo->sig=NULL; nuevo->ant=NULL; inicio=nuevo; fin=nuevo; } else if(dato<inicio->elem){//inserto al inicio nuevo->sig=inicio; nuevo->ant=NULL; inicio->ant=nuevo; inicio=nuevo; } else if(dato>fin->elem){//inserto por el final nuevo->ant=fin; nuevo->sig=NULL; fin->sig=nuevo; fin=nuevo; } else{//se recorre la lista aux=inicio; while(aux!=NULL){ if(dato<aux->elem) break; aux=aux->sig; }//while //se enlaza con el siguiente nuevo->sig=aux; nuevo->ant=aux->ant; aux->ant->sig=nuevo; aux->ant=nuevo; } } 5  sig 10   ant 4  Sig 10 20   Ant Null 5  Sig null 10   Ant 20 Inicio Inicio Nuevo-inicio Inicio Inicio Null Nuevo 4  Sig 10 Ant Null 5  Sig 50 Ant 20 20   8  Sig null Ant 10 10   50   6  sig 80   ant Null Inicio Inicio 4  Sig 10 Ant Null 5  Sig 80 Ant 20 20   8  Sig null Ant 80 10   50   8  Sig 50 Ant 10 80   Nuevo
void eliminar(){ int dato_eli; cout<<&quot;Ingrese dato a eliminar: &quot;; cin>>dato_eli; aux=inicio; while(aux!=NULL){ if(dato_eli==aux->elem) break; aux=aux->sig; } //se evaluan 4 casos if(aux==NULL){//no encontrado cout<<&quot;elemento no encontrado&quot;; } else if(aux==inicio){//borra el 1er nodo   if((aux->sig==NULL) &&(aux->ant==NULL) ){ inicio=NULL; fin=NULL;} else{ inicio=inicio->sig; inicio->ant=NULL;} } else if (aux==fin){//borra el ultimo nodo if((aux->sig==NULL) &&(aux->ant==NULL) ){ inicio=NULL; fin=NULL;}//if else{ fin=fin->ant; fin->sig=NULL;} } else{//cualquier otro nodo aux->ant->sig=aux->sig; aux->sig->ant=aux->ant; } delete(aux); } Inicio Fin 4  Sig 10 Ant Null 5  Sig null Ant 20 20   8  Sig null Ant 10 10   50   Inicio 4  Sig 10 Ant Null 5  Sig 50 Ant null 20   8  Sig null Ant 10 10   50   Fin Inicio 4  Sig 50 Ant Null 5  Sig 50 Ant 20 20   8  Sig null Ant 20 10   50   Fin 4  sig 10   ant Inicio Null
void main(){ int opcion; while(opcion<4){ system(&quot;cls&quot;); cout<<&quot;1. Insertar&quot;; cout<<&quot;2. Mostrar&quot;; cout<<&quot;3. Eliminar&quot;; cout<<&quot;4. Salir&quot;; cout<<&quot;Seleccione: &quot;; cin>>opcion; switch(opcion){ case 1:{insertar();  break;} case 2: { mostrar(); break;} case 3: {eliminar(); break;} } } }
Lista doble (Operaciones con listas) Ejercicios ,[object Object],[object Object]
Lista circular (Operaciones con listas) #include <iostream.h> #include <iostream> struct nodo{ int dato; nodo *sig; }*inicio=NULL, *nuevo=NULL, *ant, *aux, *sigue; void insertar() { nuevo=new (nodo); cout<<&quot;Elemento: &quot;; cin>>nuevo->dato; if(inicio==NULL){ inicio=nuevo; nuevo->sig=inicio; }else { ant=inicio; aux=inicio->sig; while(aux!=inicio) {ant=aux; aux=aux->sig;} ant->sig=nuevo; nuevo->sig=inicio; } } 5  Sig 10 10   ant Inicio 5  Sig 20 10   Ant 10 Inicio 4  Sig 10 Ant=10 Aux=10 20
void mostrar_circular(){ if(inicio!=NULL){//lista no vacia ant=inicio; aux=inicio->sig; cout<<ant->dato<<&quot;&quot;; while((aux!=inicio)&&(aux!=NULL)){ cout<<aux->dato<<&quot;&quot;; aux=aux->sig; } } } int contar_nodos(){ int cant=1; ant=inicio; aux=inicio->sig; while(aux!=inicio){ cant++; aux=aux->sig; } return(cant); } 5  Sig 20 10   Ant 10 Inicio 4  Sig 10 Ant=10 Aux=20 20
void menu(){ int opcion; while(opcion<4){ system(&quot;cls&quot;); cout<<&quot;1. Insertar&quot;; cout<<&quot;2. Mostrar&quot;; cout<<&quot;3. Contar Nodos&quot;; cout<<&quot;4. Salir&quot;; cout<<&quot;Seleccione: &quot;; cin>>opcion; switch(opcion){ case 1:{insertar();  break;} case 2: { mostrar_circular(); break;} case 3: { cout<<&quot;La lista tiene: &quot;<<contar_nodos()<<&quot; nodos&quot;; break;} } } } void main(){ menu(); }
Hacer un programa que almacene en una Lista Circular, la nota definitiva de 10 alumnos de lenguajes de programación, y muestre la nota más alta y el promedio de la sección. Lista circular (Operaciones con listas)
Pila  #include <iostream.h> struct nodo{ int num; nodo *ant; }*inicio=NULL, *aux, *nuevo; void empilar(){ nuevo=new (nodo); cout<<&quot;Elemento: &quot;; cin>>nuevo->num; if(inicio==NULL){ nuevo->ant=NULL; inicio=nuevo; } else{ nuevo->ant=inicio; inicio=nuevo; } } void desempilar(){ aux=inicio; if(aux==NULL) cout<<&quot;Pila Vacia&quot;; else if(aux->ant==NULL) inicio=NULL; else inicio=inicio->ant; delete(aux); cout<<&quot;elemento borrado&quot;; } void mostrar(){ aux=inicio; if (aux==NULL) cout<<&quot;La pila esta vacia&quot;; while(aux!=NULL){ cout<<aux->num<<&quot;&quot;; aux=aux->ant; } }
void main(){ int opcion; while(opcion<4){   cout<<&quot;1. Empilar&quot;;   cout<<&quot;2. Desempilar&quot;;   cout<<&quot;3. Mostrar&quot;;   cout<<&quot;4. Salir&quot;;   cout<<&quot;Seleccione una opcion: &quot;;   cin>>opcion;   switch(opcion){   case 1:{empilar(); break;}   case 2:{desempilar(); break;}   case 3:{mostrar(); break;}   }//sw }//w }//v

Más contenido relacionado

La actualidad más candente

Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesJosé Antonio Sandoval Acosta
 
1.5.1 Representación en memoria estática y dinámica.pptx
1.5.1 Representación en memoria estática y dinámica.pptx1.5.1 Representación en memoria estática y dinámica.pptx
1.5.1 Representación en memoria estática y dinámica.pptxFernando Solis
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexadoTortuly
 
Algoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaAlgoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaJavier Alvarez
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacionLuis Igoodbad
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasknowallrpa
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosJosé Antonio Sandoval Acosta
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
Listas en prolog
Listas en prologListas en prolog
Listas en prologJeffoG92
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : ColaEmerson Garay
 
Poliformismo
PoliformismoPoliformismo
PoliformismoSa_Van
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura linealesEnrique2194
 

La actualidad más candente (20)

Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras Lineales
 
1.5.1 Representación en memoria estática y dinámica.pptx
1.5.1 Representación en memoria estática y dinámica.pptx1.5.1 Representación en memoria estática y dinámica.pptx
1.5.1 Representación en memoria estática y dinámica.pptx
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexado
 
Algoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y BúsquedaAlgoritmo, Ordenacion y Búsqueda
Algoritmo, Ordenacion y Búsqueda
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Colas
ColasColas
Colas
 
Recursividad directa e indirecta
Recursividad directa e indirectaRecursividad directa e indirecta
Recursividad directa e indirecta
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
Listas en prolog
Listas en prologListas en prolog
Listas en prolog
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : Cola
 
Poliformismo
PoliformismoPoliformismo
Poliformismo
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura lineales
 

Destacado

Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadasguestbd36f7
 
“Binta y la gran idea”
 “Binta y la gran idea” “Binta y la gran idea”
“Binta y la gran idea”elizecs
 
Estructuras No Lineales
Estructuras No LinealesEstructuras No Lineales
Estructuras No Linealesguest8555cd
 
Reglamento De Anuncios
Reglamento De AnunciosReglamento De Anuncios
Reglamento De Anunciossergio
 
Transición entre el mundo universitario y el mundo profesional observatorio...
Transición entre el mundo universitario y el mundo profesional   observatorio...Transición entre el mundo universitario y el mundo profesional   observatorio...
Transición entre el mundo universitario y el mundo profesional observatorio...Centro de Innovación Profesional
 
La pista de aterrizaje.pptx. antonio horacio stiuso
La pista de aterrizaje.pptx. antonio horacio stiusoLa pista de aterrizaje.pptx. antonio horacio stiuso
La pista de aterrizaje.pptx. antonio horacio stiusoAntonioCabrala
 
Ejemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra funciónEjemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra funciónSalvador Fernández Fernández
 
Temas de Aeronáutica
Temas de AeronáuticaTemas de Aeronáutica
Temas de Aeronáuticaguest62dcd0
 

Destacado (20)

Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
“Binta y la gran idea”
 “Binta y la gran idea” “Binta y la gran idea”
“Binta y la gran idea”
 
47 at theairport
47 at theairport47 at theairport
47 at theairport
 
Test Licencias Conducir
Test Licencias ConducirTest Licencias Conducir
Test Licencias Conducir
 
Con alar sp
Con alar spCon alar sp
Con alar sp
 
Estructuras No Lineales
Estructuras No LinealesEstructuras No Lineales
Estructuras No Lineales
 
Lista simple
Lista simpleLista simple
Lista simple
 
Reglamento De Anuncios
Reglamento De AnunciosReglamento De Anuncios
Reglamento De Anuncios
 
Transición entre el mundo universitario y el mundo profesional observatorio...
Transición entre el mundo universitario y el mundo profesional   observatorio...Transición entre el mundo universitario y el mundo profesional   observatorio...
Transición entre el mundo universitario y el mundo profesional observatorio...
 
Emprendimiento y Éxito
Emprendimiento y ÉxitoEmprendimiento y Éxito
Emprendimiento y Éxito
 
Reflexiones radicales en cip ufro 2014
Reflexiones radicales en cip ufro 2014Reflexiones radicales en cip ufro 2014
Reflexiones radicales en cip ufro 2014
 
Taller insercion laboral
Taller insercion laboralTaller insercion laboral
Taller insercion laboral
 
LISTAS ESPECIALES
LISTAS ESPECIALESLISTAS ESPECIALES
LISTAS ESPECIALES
 
Conceptos antropológicos fundamentales
Conceptos antropológicos fundamentalesConceptos antropológicos fundamentales
Conceptos antropológicos fundamentales
 
La pista de aterrizaje.pptx. antonio horacio stiuso
La pista de aterrizaje.pptx. antonio horacio stiusoLa pista de aterrizaje.pptx. antonio horacio stiuso
La pista de aterrizaje.pptx. antonio horacio stiuso
 
Presentacion upe l aire
Presentacion upe   l airePresentacion upe   l aire
Presentacion upe l aire
 
Ejemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra funciónEjemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra función
 
Temas de Aeronáutica
Temas de AeronáuticaTemas de Aeronáutica
Temas de Aeronáutica
 
Arrays
ArraysArrays
Arrays
 
Estudio sobre Empleabilidad y Competencias Genéricas
Estudio sobre Empleabilidad y Competencias GenéricasEstudio sobre Empleabilidad y Competencias Genéricas
Estudio sobre Empleabilidad y Competencias Genéricas
 

Similar a Apuntadores y listas

listas enlazadas.pdf
listas enlazadas.pdflistas enlazadas.pdf
listas enlazadas.pdfssuser948499
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
Estructuras basicas tecnologia
Estructuras basicas  tecnologiaEstructuras basicas  tecnologia
Estructuras basicas tecnologiaMichelledayana6
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3marioUitzil
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Jhon_Marjorie
 
DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3efrain_rap
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1joeshego
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivastacubomx
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datosluna_72
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punterosKareliaRivas
 
Informe declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfInforme declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfYuriratmiroff
 
Acceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorAcceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorJomicast
 

Similar a Apuntadores y listas (20)

Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
listas enlazadas.pdf
listas enlazadas.pdflistas enlazadas.pdf
listas enlazadas.pdf
 
Estructuras dinámicas de datos
Estructuras dinámicas de datosEstructuras dinámicas de datos
Estructuras dinámicas de datos
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
Tecnologia
TecnologiaTecnologia
Tecnologia
 
Tecnologia
TecnologiaTecnologia
Tecnologia
 
Estructuras basicas tecnologia
Estructuras basicas  tecnologiaEstructuras basicas  tecnologia
Estructuras basicas tecnologia
 
Estructuras básicas
Estructuras básicas Estructuras básicas
Estructuras básicas
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3
 
DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3
 
Punteros
PunterosPunteros
Punteros
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punteros
 
Informe declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfInforme declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdf
 
Acceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorAcceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidor
 

Más de Marialix Quintero (15)

E book
E bookE book
E book
 
Modulo ii aplicaciones bajo software libre
Modulo ii aplicaciones bajo software libreModulo ii aplicaciones bajo software libre
Modulo ii aplicaciones bajo software libre
 
Libro tecnica de programacion
Libro tecnica de programacionLibro tecnica de programacion
Libro tecnica de programacion
 
Manual visualc
Manual visualcManual visualc
Manual visualc
 
Cppbasico
CppbasicoCppbasico
Cppbasico
 
Jclic
JclicJclic
Jclic
 
weblog - wiki
weblog - wikiweblog - wiki
weblog - wiki
 
Webquest
WebquestWebquest
Webquest
 
Pedagogia 2.0
Pedagogia 2.0Pedagogia 2.0
Pedagogia 2.0
 
Bloque académico_1
Bloque académico_1Bloque académico_1
Bloque académico_1
 
Bloque académico
Bloque académicoBloque académico
Bloque académico
 
Contenidos educativos digitales
Contenidos educativos digitalesContenidos educativos digitales
Contenidos educativos digitales
 
Ponencia software educativo con malted
Ponencia software educativo con maltedPonencia software educativo con malted
Ponencia software educativo con malted
 
Ponencia de contenidos educativos digitales
Ponencia de contenidos educativos digitalesPonencia de contenidos educativos digitales
Ponencia de contenidos educativos digitales
 
Uso educativo delas_tic
Uso educativo delas_ticUso educativo delas_tic
Uso educativo delas_tic
 

Último

Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdfRAMON EUSTAQUIO CARO BAYONA
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 

Último (20)

Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 

Apuntadores y listas

  • 1. REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA NÚCLEO FALCÓN - EXTENSIÓN PUNTO FIJO Apuntadores / Estructura de datos lineales Docente: Licda. Marialix Quintero Punto Fijo, Mayo de 2011
  • 2. Una de las aplicaciones más interesantes y potentes de la memoria dinámica y los punteros son las estructuras dinámicas de datos. Las estructuras básicas disponibles en C y C++ tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. Los arreglos están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable sea creado. En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa. Por supuesto, podemos hacer 'arrays' dinámicos, pero una vez creados, tu tamaño también será fijo, y para hacer que crezcan o diminuyan de tamaño, deberemos reconstruirlas desde el principio, por este motivo los arrays no hacen un uso eficiente de la memoria.
  • 3.
  • 4.
  • 5.
  • 6. Ejemplo: Hacer un programa muestre por pantalla el valor y la dirección de una variable x de tipo entero. #include <stdio.h> void main() { int n = 75; cout<<”el valor de n es: ”<<n; cout<<”la dirección de memoria de n es: ”<<&n; } Ojo: la dirección viene dada en hexadecimal Punteros o apuntadores (Direcciones en memoria)
  • 7. L as variables vistas hasta este momento contienen valores de datos, por el contrario las variables punteros contienen valores que son direcciones de memoria donde se almacenan datos. En resumen, un puntero es una variable que contiene una dirección de memoria, y utilizando punteros su programa puede realizar muchas tareas que no sería posible utilizando tipos de datos estándar. Punteros o apuntadores (Definición) Puntero= variable dirección de memoria dirección de memoria de otra variable = Puntero a punta a otra variable
  • 8. Cuando se telefonea a una persona, se utiliza un puntero (el número de teléfono que se marca). Punteros o apuntadores (Ejemplos) Cuando se envía una carta por correo, su información se entrega basada en un puntero que es la dirección de esa carta. Así pues, una dirección de correos y un número de teléfono tienen en común que ambos indican dónde encontrar algo.
  • 9.
  • 10. Los tipos de datos tienen que corresponderse es decir (declaración de variable de tipo de dato). Los punteros se enlazan a tipos de datos específicos, de modo que C verificará si se asigna la dirección de un tipo de dato al tipo correcto de puntero. Así, por ejemplo, si se define un puntero a float, no se le puede asignar la dirección de un carácter o un entero. Por ejemplo, este segmento de código no funcionará: Ejemplo: float *fp; char c; fp = &c; / * no es válido * / Existen dos operadores especiales de punteros: & y *. El operador de dirección (&) devuelve la dirección de memoria de su operando. El operador de indirección (*) devuelve el contenido de la dirección apuntada por el operando. Punteros o apuntadores (Ventajas y desventajas)
  • 11. Inicialización Ejemplos de Asignación estática de memoria void main(){ int a; int* b; b = &a;         //El puntero 'b' apunta a 'a'. } Punteros o apuntadores (Declaración e inicialización) Declaración tipo_de_dato *nombre_var_puntero ej: int *punt; float *nuevo;
  • 12. Existen dos tipos de punteros especiales muy utilizados en el tratamiento de sus programas: los punteros void y null (nulo). Un puntero nulo no apunta a ninguna parte -dato válido- en particular, es decir, «un puntero nulo no direcciona ningún dato válido en memoria». Un puntero nulo se utiliza para proporcionar a un programa un medio de conocer cuando una variable puntero no direcciona a un dato válido. Para declarar un puntero nulo se utiliza la macro NULL, definida en los archivos de cabecera STDEF . H, STDIO. H, STDLIB. H y STRING. H. Se debe incluir uno o más de estos archivos de cabecera antes de que se pueda utilizar la macro NULL. Ejemplos: char *p = NULL; Estático nuevo->sig=NULL; Dinámico En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato específico. En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato específico. El método es declarar el puntero como un puntero void *, denominado puntero genérico. Punteros o apuntadores (Punteros Null y void)
  • 13.
  • 14. Las estructuras dinámicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas. Pero no sólo eso, también nos permitirá crear estructuras de datos muy flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los elementos que las componen. Las estructuras de datos están compuestas de otras pequeñas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajará nuestro programa y además uno o más punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo. Una estructura básica de un nodo para crear listas de datos seria: struct nodo { int dato; struct nodo *sig; }; Listas lineales (Definición)
  • 15.
  • 16.
  • 17.
  • 18. Caso 2: Insertar un elemento en la primera posición de la lista (menor que el 1er elemento) El proceso sigue siendo muy sencillo: Hacemos que nodo->siguiente apunte a Lista. Hacemos que Lista apunte a nodo. Lista simple o abierta (Operaciones con listas) Código: else if (elem<=inicio->dato){ nuevo=new nodo; nuevo->dato=elem; nuevo->sig=inicio; inicio=nuevo; } 10 NULL 5 sig 10 50
  • 19. Caso 3: Insertar un elemento después de un nodo cualquiera de la lista Procedimiento Recorrer la lista e ir guardando el anterior cuando se encuentre la posición correcta, el anterior debe apuntar al nuevo nodo y el nuevo->siguiente a la posición siguiente del anterior. Lista simple o abierta (Operaciones con listas) else { aux=inicio; while (aux!=NULL){ if (elem<aux->dato) break; ant=aux; aux=aux->sig; } nuevo=new nodo; nuevo->dato=elem; ant->sig=nuevo; nuevo->sig=aux; } 10 NULL 5 sig Aux=10-50 Elem=7 Ant=10 7 NULL 10 50 20 5 sig 10 7 sig 20 10 NULL 50
  • 20. Recorrer / Mostrar void mostrar() { nodo *aux; aux=inicio; while(aux!=NULL){ cout<<&quot;&quot;<<aux->dato<<&quot;&quot;; aux=aux->sig;} aux=lista;} Lista simple o abierta (Operaciones con listas) 5 sig 10 7 sig 20 10 NULL 50
  • 21. Buscar / Eliminar: Se debe recorrer la lista buscando el elemento a borrar, tomando en cuenta su posición en la lista: si es el primer elemento, el último o esta en el medio. void eliminar(int elem) { aux=inicio; while (aux!=NULL){ if (elem==aux->dato) break; ant=aux; aux=aux->sig; }//while if(aux==NULL) cout<<&quot;elemento no encontrado&quot;; else{ if (aux==inicio)//primer elemento inicio=aux->sig; else if (aux->sig==NULL)//ultimo ant->sig=NULL; else ant->sig=aux->sig; delete(aux);} } Lista simple o abierta (Operaciones con listas) 5 sig 10 7 sig 20 10 NULL 50 Aux=10-20 Elem=7 Ant=10
  • 22. Cuerpo del programa Librería: #include <iostream.h> void main(){ int op; while (op<4) { cout<<&quot;Listas Dinamicas - Menu Principal&quot;; cout<<&quot;1.Insertar&quot;; cout<<&quot;2.Eliminar&quot;; cout<<&quot;3.Mostrar&quot;; cout<<”4.Salir&quot;; cout<<&quot;Seleccione una opcion: &quot;; cin>>op; int dat; switch (op){ case 1: { cout<<&quot;Dato: &quot;; cin>>dat; insertar(dat); break; } case 2: { cout<<&quot;Dato: &quot;; cin>>dat; eliminar(dat); break;} case 3:{ mostrar(); break; } } } } Lista simple o abierta (Operaciones con listas)
  • 23.
  • 24.
  • 25. void insertar(){ int dato; nuevo=new nodo; cout<<&quot;Ingrese numero: &quot;; cin>>dato; nuevo->elem=dato; if (inicio==NULL){//lista vacia nuevo->sig=NULL; nuevo->ant=NULL; inicio=nuevo; fin=nuevo; } else if(dato<inicio->elem){//inserto al inicio nuevo->sig=inicio; nuevo->ant=NULL; inicio->ant=nuevo; inicio=nuevo; } else if(dato>fin->elem){//inserto por el final nuevo->ant=fin; nuevo->sig=NULL; fin->sig=nuevo; fin=nuevo; } else{//se recorre la lista aux=inicio; while(aux!=NULL){ if(dato<aux->elem) break; aux=aux->sig; }//while //se enlaza con el siguiente nuevo->sig=aux; nuevo->ant=aux->ant; aux->ant->sig=nuevo; aux->ant=nuevo; } } 5 sig 10 ant 4 Sig 10 20 Ant Null 5 Sig null 10 Ant 20 Inicio Inicio Nuevo-inicio Inicio Inicio Null Nuevo 4 Sig 10 Ant Null 5 Sig 50 Ant 20 20 8 Sig null Ant 10 10 50 6 sig 80 ant Null Inicio Inicio 4 Sig 10 Ant Null 5 Sig 80 Ant 20 20 8 Sig null Ant 80 10 50 8 Sig 50 Ant 10 80 Nuevo
  • 26. void eliminar(){ int dato_eli; cout<<&quot;Ingrese dato a eliminar: &quot;; cin>>dato_eli; aux=inicio; while(aux!=NULL){ if(dato_eli==aux->elem) break; aux=aux->sig; } //se evaluan 4 casos if(aux==NULL){//no encontrado cout<<&quot;elemento no encontrado&quot;; } else if(aux==inicio){//borra el 1er nodo if((aux->sig==NULL) &&(aux->ant==NULL) ){ inicio=NULL; fin=NULL;} else{ inicio=inicio->sig; inicio->ant=NULL;} } else if (aux==fin){//borra el ultimo nodo if((aux->sig==NULL) &&(aux->ant==NULL) ){ inicio=NULL; fin=NULL;}//if else{ fin=fin->ant; fin->sig=NULL;} } else{//cualquier otro nodo aux->ant->sig=aux->sig; aux->sig->ant=aux->ant; } delete(aux); } Inicio Fin 4 Sig 10 Ant Null 5 Sig null Ant 20 20 8 Sig null Ant 10 10 50 Inicio 4 Sig 10 Ant Null 5 Sig 50 Ant null 20 8 Sig null Ant 10 10 50 Fin Inicio 4 Sig 50 Ant Null 5 Sig 50 Ant 20 20 8 Sig null Ant 20 10 50 Fin 4 sig 10 ant Inicio Null
  • 27. void main(){ int opcion; while(opcion<4){ system(&quot;cls&quot;); cout<<&quot;1. Insertar&quot;; cout<<&quot;2. Mostrar&quot;; cout<<&quot;3. Eliminar&quot;; cout<<&quot;4. Salir&quot;; cout<<&quot;Seleccione: &quot;; cin>>opcion; switch(opcion){ case 1:{insertar(); break;} case 2: { mostrar(); break;} case 3: {eliminar(); break;} } } }
  • 28.
  • 29. Lista circular (Operaciones con listas) #include <iostream.h> #include <iostream> struct nodo{ int dato; nodo *sig; }*inicio=NULL, *nuevo=NULL, *ant, *aux, *sigue; void insertar() { nuevo=new (nodo); cout<<&quot;Elemento: &quot;; cin>>nuevo->dato; if(inicio==NULL){ inicio=nuevo; nuevo->sig=inicio; }else { ant=inicio; aux=inicio->sig; while(aux!=inicio) {ant=aux; aux=aux->sig;} ant->sig=nuevo; nuevo->sig=inicio; } } 5 Sig 10 10 ant Inicio 5 Sig 20 10 Ant 10 Inicio 4 Sig 10 Ant=10 Aux=10 20
  • 30. void mostrar_circular(){ if(inicio!=NULL){//lista no vacia ant=inicio; aux=inicio->sig; cout<<ant->dato<<&quot;&quot;; while((aux!=inicio)&&(aux!=NULL)){ cout<<aux->dato<<&quot;&quot;; aux=aux->sig; } } } int contar_nodos(){ int cant=1; ant=inicio; aux=inicio->sig; while(aux!=inicio){ cant++; aux=aux->sig; } return(cant); } 5 Sig 20 10 Ant 10 Inicio 4 Sig 10 Ant=10 Aux=20 20
  • 31. void menu(){ int opcion; while(opcion<4){ system(&quot;cls&quot;); cout<<&quot;1. Insertar&quot;; cout<<&quot;2. Mostrar&quot;; cout<<&quot;3. Contar Nodos&quot;; cout<<&quot;4. Salir&quot;; cout<<&quot;Seleccione: &quot;; cin>>opcion; switch(opcion){ case 1:{insertar(); break;} case 2: { mostrar_circular(); break;} case 3: { cout<<&quot;La lista tiene: &quot;<<contar_nodos()<<&quot; nodos&quot;; break;} } } } void main(){ menu(); }
  • 32. Hacer un programa que almacene en una Lista Circular, la nota definitiva de 10 alumnos de lenguajes de programación, y muestre la nota más alta y el promedio de la sección. Lista circular (Operaciones con listas)
  • 33. Pila #include <iostream.h> struct nodo{ int num; nodo *ant; }*inicio=NULL, *aux, *nuevo; void empilar(){ nuevo=new (nodo); cout<<&quot;Elemento: &quot;; cin>>nuevo->num; if(inicio==NULL){ nuevo->ant=NULL; inicio=nuevo; } else{ nuevo->ant=inicio; inicio=nuevo; } } void desempilar(){ aux=inicio; if(aux==NULL) cout<<&quot;Pila Vacia&quot;; else if(aux->ant==NULL) inicio=NULL; else inicio=inicio->ant; delete(aux); cout<<&quot;elemento borrado&quot;; } void mostrar(){ aux=inicio; if (aux==NULL) cout<<&quot;La pila esta vacia&quot;; while(aux!=NULL){ cout<<aux->num<<&quot;&quot;; aux=aux->ant; } }
  • 34. void main(){ int opcion; while(opcion<4){ cout<<&quot;1. Empilar&quot;; cout<<&quot;2. Desempilar&quot;; cout<<&quot;3. Mostrar&quot;; cout<<&quot;4. Salir&quot;; cout<<&quot;Seleccione una opcion: &quot;; cin>>opcion; switch(opcion){ case 1:{empilar(); break;} case 2:{desempilar(); break;} case 3:{mostrar(); break;} }//sw }//w }//v