Escolar Documentos
Profissional Documentos
Cultura Documentos
case 2:
{
if (cabeza == NULL)
{
printf("La lista esta vacia, ingrese valores\n");
printf("\nIngrese un nuevo valor: ");
scanf_s("%d", &num);
ingresa_inicio(&cabeza, num);
}
else
{
printf("\nIngrese un nuevo valor: ");
scanf_s("%d", &num);
ingresa_final(cabeza, num);
}
printf("\n");
_getch();
}break;
case 3:
{
if (cabeza == NULL)
printf("La lista esta vacia...\n\n");
printf("Lista actual\n\n");
imprime(cabeza);
printf("\n\nOrdenando...\n");
ordenar(cabeza);
printf("Lista Ordenada:\n");
imprime(cabeza);
_getch();
}
break;
case 4:
{
if (cabeza==NULL)
printf("La lista esta vacia...\n\n");
else
imprime(cabeza);
_getch();
}
break;
case 5:
{
if (cabeza == NULL)
printf("La lista esta vacia...\n\n");
else
{
printf("\nLista actual:\n");
imprime(cabeza);
printf("\n");
printf("\nIngrese el valor a eliminar: ");
scanf_s("%d",&num);
borrar(&cabeza, num);
printf("\nLa nueva lista es:\n");
imprime(cabeza);
}
_getch();
}break;
case 6:
{
printf("Ingrese dato a buscar: ");
scanf_s("%d",&num);
if (cabeza==NULL)
printf("No hay elementos en la lista...\n");
else if (busqueda(cabeza,num)==true)
printf("Dato encontrado\n");
else
printf("Dato no encontrado");
_getch();
}break;
case 7:
{
printf("Presione enter para salir...\n");
}break;
default:
{
printf("\nOpcion no Valida");
_getch();
}break;
}
printf("\n");
} while (opc != 7);
_getch();
return 0;
}
void ingresa_inicio(NODO**p, int x)//Parametrizacion por direccion, altera cabeza de
lista
{
NODO* nuevo;
nuevo = new NODO;
nuevo->dato = x;
nuevo->sig = *p;
*p = nuevo;
}
NODO* ingresa_inicio2(NODO*p, int x)
{
NODO *nuevo;
nuevo = new NODO;
nuevo->dato = x;
nuevo->sig=p;
return nuevo;
}
void ingresa_final(NODO* p, int d)
{
NODO* nuevo, *aux;
nuevo = new NODO;
nuevo->dato = d;
nuevo->sig = NULL;
aux = p;
while (aux->sig != NULL)
{
aux = aux->sig;
}
aux->sig = nuevo;
}
void imprime(NODO* p)
{
NODO* aux = p;
printf("||");
while (aux != NULL)
{
printf(" %d ->", aux->dato);
aux = aux->sig;
}
printf(" NULL");
}
bool busqueda(NODO* cabeza,int d)
{
NODO* aux = cabeza;
bool temp = false;
while (aux != NULL && temp == false)
{
if (aux->dato == d)
return temp = true;
else
{
temp = false;
aux = aux->sig;
}
}
}
void ordenar(NODO* p)
{
NODO* actual, *siguiente;
int temp;
actual = p;
while (actual->sig != NULL)
{
siguiente = actual->sig;
while (siguiente != NULL)
{
if (actual->dato > siguiente->dato)
{
temp = siguiente->dato;
siguiente->dato = actual->dato;
actual->dato = temp;
}
siguiente = siguiente->sig;
}
actual = actual->sig;
siguiente = actual->sig;
}
}
void borrar(NODO* p, int d)
{
if (busqueda(p, d) == false)
printf("El dato ingresado no esta en la lista o ya fue eliminado...\n");
else
{
NODO* actual = p;
NODO* anterior = NULL;
bool temp = false;
while (actual != NULL && temp == false)
{
if (actual->dato == d)
temp = true;
else
{
temp = false;
anterior = actual;
actual = actual->sig;
}
}
if (actual != NULL)
{
// distingue entre cabecera y resto de la lista
if (actual == p)
p= actual->sig;
else
anterior->sig= actual->sig;
delete actual;
}
}
}