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");
}
} |