Vous êtes sur la page 1sur 7

1.

CREAR UNA LISTA SIMPLE CON ESTRURTURAS


CODIFICACIN:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct NODO
{
int dato;
NODO* sig;
};
void ingresa_final(NODO* p, int d);
void ingresa_inicio(NODO** p, int d);
NODO* ingresa_inicio2(NODO* p, int d);
void imprime(NODO* p);
bool busqueda(NODO* cabeza, int d);
void ordenar(NODO* p);
void borrar(NODO** p, int d);
int main()
{
NODO *cabeza = NULL;
int opc;
int num;
do
{
system("cls");
printf("\n\tLISTA SIMPLE CON ESTRUCTURAS\n");
printf("\n");
printf("\n\tElija una opcion\n");
printf("[1] Insertar nodo al inicio\n");
printf("[2] Insertar nodo al final\n");
printf("[3] Ordenar Lista\n");
printf("[4] Imprimir\n");
printf("[5] Eliminar dato\n");
printf("[6] Buscar dato\n");
printf("[7] Salir\n\n");
printf("Opcion: ");
scanf_s("%d",&opc);
printf("\n");
switch (opc)
{
case 1:
{
if (cabeza==NULL)
printf("La lista esta vacia, ingrese valores\n");
printf("\nIngrese un nuevo valor: ");
scanf_s("%d",&num);
ingresa_inicio(&cabeza,num);
printf("\n");
_getch();
}break;

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

EJECUCIN DEL PROGRAMA: