Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/10/2015, 18:26
Saoirse
 
Fecha de Ingreso: octubre-2015
Mensajes: 2
Antigüedad: 8 años, 6 meses
Puntos: 0
Menu para listas enlazadas simples

Necesito ayuda con un trabajo para la universidad, necesito elegir 3 listas enlazadas simples, y en un menu tengo que Insertar y Eliminar nodos, Mostrar o eliminar listas, contar nodos de la lista, comparar si las listas son identicas, similares, o si una esta contenida en las otras, ordenar una lista... aquí esta el codigo que me he intentado hacer durante el dia
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
typedef struct _nodo {
int valor;
struct _nodo *siguiente;
} tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;

void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);

int ListaVacia(Lista l);

void BorrarLista(Lista *);
void MostrarLista(Lista l);


int main()
{
Lista lista1 = NULL;
Lista lista2 = NULL;
Lista lista3 = NULL;
pNodo p;

int opc,n,v;
do{
printf("Menu\n");
printf("1. Si Desea Instertar Nodos\n");
printf("2. Si Desea Eliminar Un Nodo\n");
printf("3. Si Desea Mostrar Una Lista\n");
printf("4. Si Desea Eliminar Una Lista\n");
printf("5. Si Desea Contar los Nodos de la Lista\n");

scanf("%d",&opc);
switch(opc)
{
case 1:
printf("En Que Lista Desea Ingresar Nodos\n");
scanf("%d",&opc);
switch(opc)
{
case 1: printf("Lista 1:Que Numero Desea Ingresar\n");
scanf("%d", &v);
Insertar(&lista1,v);
break;
case 2: printf("Lista 2:Que Numero Desea Ingresar\n");
scanf("%d", &v);
Insertar(&lista2,v);
break;
case 3: printf("Lista 3:Que Numero Desea Ingresar\n");
scanf("%d", &v);
Insertar(&lista3,v);
break;
default:
break;
}
break;
case 2:

printf("En Que Lista Desea Eliminar Nodos\n");
scanf("%d",&opc);
switch(opc)
{
case 1: printf("Que Numero Desea Eliminar\n");
scanf("%d", &v);
Borrar(&lista1,v);
break;
case 2: printf("Que Numero Desea Eliminar\n");
scanf("%d", &v);
Borrar(&lista2,v);
break;
case 3: printf("Que Numero Desea Eliminar\n");
scanf("%d", &v);
Borrar(&lista3,v);
break;
default:
break;
}

break;

case 3: printf("Que Lista Desea Mostrar?\n");
printf("Lista 1\n");
printf("Lista 2\n");
printf("Lista 3\n");
scanf("%d",&v);
switch(opc)
{
case 1: MostrarLista(lista1);
break;
case 2: MostrarLista(lista2);
break;
case 3: MostrarLista(lista3);
break;
default:
break;
}
break;


case 4:

break;
case 5:
break;
case 6:
break;


default:

break;
}


Insertar(&lista1, 10);
Insertar(&lista1, 20);
Insertar(&lista1, 30);
Insertar(&lista1, 40);


Insertar(&lista2, 100);
Insertar(&lista2, 200);
Insertar(&lista2, 300);
Insertar(&lista2, 400);


Insertar(&lista3, 1000);
Insertar(&lista3, 2000);
Insertar(&lista3, 3000);
Insertar(&lista3, 4000);



}while (opc!=0);
system("PAUSE");
return 0;


getch();
}

void Insertar(Lista *lista, int v)
{
pNodo nuevo, anterior;


nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->valor = v;


if(ListaVacia(*lista) ) {

nuevo->siguiente = *lista;

*lista = nuevo;
}
else {

anterior = *lista;

while(anterior->siguiente)
anterior = anterior->siguiente;

nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}

void Borrar(Lista *lista, int v)
{
pNodo anterior, nodo;

nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v) {
anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v) return;
else {
if(!anterior)
*lista = nodo->siguiente;
else
anterior->siguiente = nodo->siguiente;
free(nodo);
}
}

int ListaVacia(Lista lista)
{
return (lista == NULL);
}

void BorrarLista(Lista *lista)
{
pNodo nodo;

while(*lista) {
nodo = *lista;
*lista = nodo->siguiente;
free(nodo);
}
}

void MostrarLista(Lista lista)
{
pNodo nodo = lista;

if(ListaVacia(lista)) printf("Lista vacía\n");
else {
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}
printf("\n");
}
}