SlideShare une entreprise Scribd logo
1  sur  4
LISTAS ENLAZADAS EJERCICIO
#include <stdio.h>
#include <stdlib.h>
#define ASCENDENTE 1
#define DESCENDENTE 0
typedef struct _nodo {
  int valor;
  struct _nodo *siguiente;
  struct _nodo *anterior;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
/* Funciones con listas: */
void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);
void BorrarLista(Lista *);
void MostrarLista(Lista l, int orden);
 main() {

 Lista lista = NULL;
 pNodo p;
 Insertar(&lista, 20);
 Insertar(&lista, 10);
 Insertar(&lista, 40);
 Insertar(&lista, 30);
 Borrar(&lista, 10);
 MostrarLista(lista, ASCENDENTE);
 MostrarLista(lista, ASCENDENTE);
 BorrarLista(&lista);

 printf("el promedio es:%d",);
 getchar();
 return 0;
}
void Insertar(Lista *lista, int v) {
  pNodo nuevo, actual;
  /* Crear un nodo nuevo */
  nuevo = (pNodo)malloc(sizeof(tipoNodo));
  nuevo->valor = v;

 /* Colocamos actual en la primera posición de la lista */
actual = *lista;
 if(actual) while(actual->anterior) actual = actual->anterior;
 /* Si la lista está vacÃa o el primer miembro es mayor que el nuevo */
 if(!actual || actual->valor > v) {
   /* Añadimos la lista a continuación del nuevo nodo */
   nuevo->siguiente = actual;
   nuevo->anterior = NULL;
   if(actual) actual->anterior = nuevo;
   if(!*lista) *lista = nuevo;
 }
 else {
   /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
     un valor mayor que v */
   while(actual->siguiente &&actual->siguiente->valor <= v)
     actual = actual->siguiente;
   /* Insertamos el nuevo nodo después del nodo anterior */
   nuevo->siguiente = actual->siguiente;
   actual->siguiente = nuevo;
   nuevo->anterior = actual;
   if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo;
 }
}
void Borrar(Lista *lista, int v) {
  pNodo nodo;

 /* Buscar el nodo de valor v */
 nodo = *lista;
 while(nodo && nodo->valor < v) nodo = nodo->siguiente;
 while(nodo && nodo->valor > v) nodo = nodo->anterior;
 /* El valor v no está en la lista */
 if(!nodo || nodo->valor != v) return;

 /* Borrar el nodo */
 /* Si lista apunta al nodo que queremos borrar, apuntar a otro */
 if(nodo == *lista)
   if(nodo->anterior) *lista = nodo->anterior;
   else *lista = nodo->siguiente;

 if(nodo->anterior) /* no es el primer elemento */
   nodo->anterior->siguiente = nodo->siguiente;
 if(nodo->siguiente) /* no es el último nodo */
   nodo->siguiente->anterior = nodo->anterior;
free(nodo);
}
void BorrarLista(Lista *lista) {
  pNodo nodo, actual;
  actual = *lista;
  while(actual->anterior) actual = actual->anterior;
  while(actual) {
    nodo = actual;
    actual = actual->siguiente;
    free(nodo);
  }
  *lista = NULL;
}
void MostrarLista(Lista lista, int orden) {
  pNodo nodo = lista;
  if(!lista) printf("Lista vacÃa");
  nodo = lista;
  if(orden == ASCENDENTE) {
    while(nodo->anterior) nodo = nodo->anterior;
    printf("Orden ascendente: ");
    while(nodo) {
       printf("%d -> ", nodo->valor);
       nodo = nodo->siguiente;
    }
  }
  else {
    while(nodo->siguiente) nodo = nodo->siguiente;
    printf("Orden descendente: ");
    while(nodo) {
       printf("%d -> ", nodo->valor);
       nodo = nodo->anterior;
    }
  }

    printf("n");
}
Lista enlazada 2 parcial

Contenu connexe

Tendances (10)

NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Código Java Escrito de Forma Estándar
Código Java Escrito de Forma EstándarCódigo Java Escrito de Forma Estándar
Código Java Escrito de Forma Estándar
 
1
11
1
 
Exposicion karen troya
Exposicion karen troyaExposicion karen troya
Exposicion karen troya
 
Colas 1er ejercicio
Colas 1er ejercicioColas 1er ejercicio
Colas 1er ejercicio
 
JavaScript funciones
JavaScript funcionesJavaScript funciones
JavaScript funciones
 
Prac1
Prac1Prac1
Prac1
 
Cifrado del cesar
Cifrado del cesarCifrado del cesar
Cifrado del cesar
 
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasTap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
 
Practicas programacion 1 10
Practicas programacion 1 10Practicas programacion 1 10
Practicas programacion 1 10
 

Similaire à Lista enlazada 2 parcial

Listas enlazadas doble exposicion
Listas enlazadas doble exposicionListas enlazadas doble exposicion
Listas enlazadas doble exposicionjcum1
 
Código - Apuntadores
Código - ApuntadoresCódigo - Apuntadores
Código - Apuntadoresfelix lira
 
135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptx135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptxiq72024016
 
Estructura dedatos listas pilas y colas 12-0617
Estructura dedatos listas pilas y colas 12-0617Estructura dedatos listas pilas y colas 12-0617
Estructura dedatos listas pilas y colas 12-0617Johannadotel
 
Listas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPListas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPMiguelGomez371
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas pptAby Castillo
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasElbery
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadasguestbd36f7
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Partecarpio
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colasiventura26
 
Algoritmos de ordenacion_implementacion
Algoritmos de ordenacion_implementacionAlgoritmos de ordenacion_implementacion
Algoritmos de ordenacion_implementacionJONY21
 
Ejercicio de listas de lenguaje c
Ejercicio de listas de lenguaje cEjercicio de listas de lenguaje c
Ejercicio de listas de lenguaje cmarcosmendozap
 
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
 

Similaire à Lista enlazada 2 parcial (20)

Listas enlazadas doble exposicion
Listas enlazadas doble exposicionListas enlazadas doble exposicion
Listas enlazadas doble exposicion
 
Lista simple
Lista simpleLista simple
Lista simple
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 
Código - Apuntadores
Código - ApuntadoresCódigo - Apuntadores
Código - Apuntadores
 
135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptx135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptx
 
Estructura dedatos listas pilas y colas 12-0617
Estructura dedatos listas pilas y colas 12-0617Estructura dedatos listas pilas y colas 12-0617
Estructura dedatos listas pilas y colas 12-0617
 
Listas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPListas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UP
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas ppt
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Sesion_09.pptx
Sesion_09.pptxSesion_09.pptx
Sesion_09.pptx
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 
Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colas
 
Algoritmos de ordenacion_implementacion
Algoritmos de ordenacion_implementacionAlgoritmos de ordenacion_implementacion
Algoritmos de ordenacion_implementacion
 
Ejercicio de listas de lenguaje c
Ejercicio de listas de lenguaje cEjercicio de listas de lenguaje c
Ejercicio de listas de lenguaje c
 
Listas
ListasListas
Listas
 
Listas Simples
Listas SimplesListas Simples
Listas Simples
 
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
 

Lista enlazada 2 parcial

  • 1. LISTAS ENLAZADAS EJERCICIO #include <stdio.h> #include <stdlib.h> #define ASCENDENTE 1 #define DESCENDENTE 0 typedef struct _nodo { int valor; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; /* Funciones con listas: */ void Insertar(Lista *l, int v); void Borrar(Lista *l, int v); void BorrarLista(Lista *); void MostrarLista(Lista l, int orden); main() { Lista lista = NULL; pNodo p; Insertar(&lista, 20); Insertar(&lista, 10); Insertar(&lista, 40); Insertar(&lista, 30); Borrar(&lista, 10); MostrarLista(lista, ASCENDENTE); MostrarLista(lista, ASCENDENTE); BorrarLista(&lista); printf("el promedio es:%d",); getchar(); return 0; } void Insertar(Lista *lista, int v) { pNodo nuevo, actual; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Colocamos actual en la primera posición de la lista */
  • 2. actual = *lista; if(actual) while(actual->anterior) actual = actual->anterior; /* Si la lista está vacÃa o el primer miembro es mayor que el nuevo */ if(!actual || actual->valor > v) { /* Añadimos la lista a continuación del nuevo nodo */ nuevo->siguiente = actual; nuevo->anterior = NULL; if(actual) actual->anterior = nuevo; if(!*lista) *lista = nuevo; } else { /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor que v */ while(actual->siguiente &&actual->siguiente->valor <= v) actual = actual->siguiente; /* Insertamos el nuevo nodo después del nodo anterior */ nuevo->siguiente = actual->siguiente; actual->siguiente = nuevo; nuevo->anterior = actual; if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo; } } void Borrar(Lista *lista, int v) { pNodo nodo; /* Buscar el nodo de valor v */ nodo = *lista; while(nodo && nodo->valor < v) nodo = nodo->siguiente; while(nodo && nodo->valor > v) nodo = nodo->anterior; /* El valor v no está en la lista */ if(!nodo || nodo->valor != v) return; /* Borrar el nodo */ /* Si lista apunta al nodo que queremos borrar, apuntar a otro */ if(nodo == *lista) if(nodo->anterior) *lista = nodo->anterior; else *lista = nodo->siguiente; if(nodo->anterior) /* no es el primer elemento */ nodo->anterior->siguiente = nodo->siguiente; if(nodo->siguiente) /* no es el último nodo */ nodo->siguiente->anterior = nodo->anterior;
  • 3. free(nodo); } void BorrarLista(Lista *lista) { pNodo nodo, actual; actual = *lista; while(actual->anterior) actual = actual->anterior; while(actual) { nodo = actual; actual = actual->siguiente; free(nodo); } *lista = NULL; } void MostrarLista(Lista lista, int orden) { pNodo nodo = lista; if(!lista) printf("Lista vacÃa"); nodo = lista; if(orden == ASCENDENTE) { while(nodo->anterior) nodo = nodo->anterior; printf("Orden ascendente: "); while(nodo) { printf("%d -> ", nodo->valor); nodo = nodo->siguiente; } } else { while(nodo->siguiente) nodo = nodo->siguiente; printf("Orden descendente: "); while(nodo) { printf("%d -> ", nodo->valor); nodo = nodo->anterior; } } printf("n"); }