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

Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Muhammad Hammad Waseem
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: ListaEmerson Garay
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 
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 lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no linealeslos4estatidinamicos
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortlinkinpark03
 
Unit I-Data structures stack & Queue
Unit I-Data structures stack & QueueUnit I-Data structures stack & Queue
Unit I-Data structures stack & QueueDrkhanchanaR
 
Unit I-Data Structures_Intoduction.pptx
Unit I-Data Structures_Intoduction.pptxUnit I-Data Structures_Intoduction.pptx
Unit I-Data Structures_Intoduction.pptxDrkhanchanaR
 
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
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)José Antonio Sandoval Acosta
 

La actualidad más candente (20)

Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: Lista
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 
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
 
Stack and Queue
Stack and Queue Stack and Queue
Stack and Queue
 
Programación 3: colas
Programación 3: colasProgramación 3: colas
Programación 3: colas
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no lineales
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
 
Lista simple
Lista simpleLista simple
Lista simple
 
Linklist
LinklistLinklist
Linklist
 
Unit I-Data structures stack & Queue
Unit I-Data structures stack & QueueUnit I-Data structures stack & Queue
Unit I-Data structures stack & Queue
 
Unit I-Data Structures_Intoduction.pptx
Unit I-Data Structures_Intoduction.pptxUnit I-Data Structures_Intoduction.pptx
Unit I-Data Structures_Intoduction.pptx
 
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
 
Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Linked List
Linked ListLinked List
Linked List
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
 

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
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en CAnesGy SD
 

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
 
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
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
 

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

codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativafiorelachuctaya2
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Baker Publishing Company
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
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
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuelacocuyelquemao
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 

Último (20)

codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativa
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.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
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuela
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 

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