listas enlazadas

#include <iostream>
using namespace std;

#include <stdio.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1

typedef int boolean;

boolean estaVacia();

typedef struct nodo{
 int llave;
 struct nodo * sig; /* auto referencia */
}nodoLista;

nodoLista * primero = NULL;
nodoLista * ultimo = NULL;

void insertarInicio();
void insertarFinal();
void mostrarLista();
void eliminarLista();

int main(void) {
 setvbuf(stdout, NULL, _IONBF, 0);
 int opcion;
 do{
  printf("\n\nMENU");
  printf("\n0.- Salir");
  printf("\n1.- Agregar un nodo al inicio");
  printf("\n2.- Mostrar los valores de la lista");
  printf("\n3.- Agregar un nodo al final");
  printf("\n4.- Eliminar un elemento");

  printf("\n\nDame tu opci�n");
  scanf("%d", &opcion);
opcion=1;
  switch(opcion){
   case 0:
    break;
   case 1:
    insertarInicio();
    break;
   case 2:
    mostrarLista();
    break;
   case 3:
    insertarFinal();
    break;
   case 4:
    eliminarLista();
    break;
  }

 } while (opcion != 0);


 return EXIT_SUCCESS;
}

void insertarInicio(){
 nodoLista * nuevo;
 nuevo = (nodoLista *)malloc(sizeof(nodoLista));

 printf("\n\nDame el valor de la llave");

 scanf("%d", &nuevo->llave);
 nuevo->sig = primero;
 primero = nuevo;

 if(primero->sig == NULL)
  ultimo = primero;
}

void insertarFinal(){
 if (estaVacia()){
  insertarInicio();
  return;
 }

 nodoLista * nuevo;
 nuevo = (nodoLista *)malloc(sizeof(nodoLista));

 printf("\n\nDame el valor de la llave");
 scanf("%d", &nuevo->llave);
 nuevo->sig = NULL;
 ultimo->sig = nuevo;
 ultimo = nuevo;
}

void mostrarLista(){
 if (estaVacia()){
  printf("\n\nLa lista est� vac�a");
  return;
 }
 nodoLista * recorre = primero;
 while (recorre != NULL){
  printf("%d  ", recorre->llave);
  recorre = recorre->sig;
 }
}

void eliminarLista(){
 nodoLista* anterior;
 nodoLista* actual;
 nodoLista* siguiente;
 nodoLista* recorre=primero;

 int op;
 printf("Cual es el entero a eliminar?");
 scanf("%d", &op);

 anterior=primero;
 actual=primero;
 siguiente=primero->sig;

 while(recorre != NULL){

  if(recorre->llave == op){
   anterior->sig=siguiente;
   free(actual);
  }
  else{}
  anterior=recorre;
  recorre = recorre->sig;
  actual=recorre;
  if(recorre != NULL){siguiente = recorre->sig;}
 }
}

boolean estaVacia(){
 if (primero == NULL)
  return TRUE;
 else
  return FALSE;
}




No hay comentarios:

Publicar un comentario