You are on page 1of 8

Escuela Politcnica del Ejrcito

DEPARTAMENTO CIENCIAS DE LA COMPUTACIN

Materia:

Estructuras de Datos

Nombre Alumno:

Vctor Andrs Bauz Rosas

Nivel:

Tercer Semestre

Profesor:

Ing. Alvear

Caratula

Contenido
Caratula............................................................................................................................. 1
Marco Terico .................................................................................................................. 3
Algoritmo para borrar un elemento .............................................................................. 3
Algoritmo de insercin ................................................ Error! Bookmark not defined.
Algoritmo de Ordenamiento ........................................ Error! Bookmark not defined.
Codigo .............................................................................................................................. 3
Marco Prctico .................................................................................................................. 7
Bibliografa: ...................................................................................................................... 8
Conclusiones: ................................................................................................................... 8
Recomendaciones: ............................................................................................................ 8

Marco Terico
Algoritmo para borrar un elemento
Despus probaremos la funcin para buscar y borrar, borraremos los elementos 10,
15, 45, 30 y 40, as probaremos los casos de borrar el primero, el ltimo y un caso
intermedio.
Recordemos que para eliminar un nodo necesitamos disponer de un puntero al
nodo anterior.
1. Lo primero ser localizar el nodo a eliminar, si es que existe. Pero sin
perder el puntero al nodo anterior. Partiremos del nodo primero, y del
valor NULL para anterior. Y avanzaremos mientras nodo no
sea NULL o mientras que el valor almacenado en nodo sea menor que el
que buscamos.
2. Ahora pueden darse tres casos:
3. Que el nodo sea NULL, esto indica que todos los valores almacenados
en la lista son menores que el que buscamos y el nodo que buscamos no
existe. Retornaremos sin borrar nada.
4. Que el valor almacenado en nodo sea mayor que el que buscamos, en
ese caso tambin retornaremos sin borrar nada, ya que esto indica que
el nodo que buscamos no existe.
5. Que el valor almacenado en el nodo sea igual al que buscamos.
6. De nuevo existen dos casos:
7. Que anterior sea NULL. Esto indicara que el nodo que queremos
borrar es el primero, as que modificamos el valor de Lista para que
apunte al nodo siguiente al que queremos borrar.
8. Que anterior no sea NULL, el nodo no es el primero, as que asignamos
a anterior->siguiente la direccin de nodo->siguiente.
9. Despus de 7 u 8, liberamos la memoria de nodo.

Codigo
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
struct nodo
{
int dato;
struct nodo *sig;
};
void insertar(struct nodo *p,int x);
void imprimir(struct nodo *p);
void eliminar(struct nodo *p,int e);
void ordenar(struct nodo *p);

int contar(struct nodo *p);


void main()
{
int x,y,op;
nodo *cabecera,*nuevo;
cabecera = new nodo;
do
{
printf("***************************************");
printf("****Escuela Politecnica del Ejercito***");
printf("***************************************\n");

printf("1.- Insetar Elementos\n");


printf("2.- Eliminar un Elemento\n");
printf("3.- Imprimir la Lista\n");
printf("4.- Salir\n");
scanf("%d",&op);
system("cls");
switch(op)
{
case 1:
printf("Ingrese numero:\n");
scanf("%d",&x);
cabecera->dato=x;
cabecera->sig=NULL;
while(x!=-1)
{
printf("Ingrese numero:\n");
scanf("%d",&x);
if(x!=-1)
insertar(cabecera,x);
}
system("cls");
break;
case 2:
if(cabecera!=NULL)
{
printf("Ingrese el elemento que desea eliminar\n");
scanf("%d",&y);
eliminar(cabecera,y);
printf("Ahora la cantidad de Elementos es:
%d\n",contar(cabecera));
}
else
printf("Lista Vacia\n");
system("cls");
break;

case 3:
if(cabecera!=NULL)
{
printf("La cantidad de Elementos es:
%d\n",contar(cabecera));
printf("La Lista contiene los siguientes
Elementos:\n");
imprimir(cabecera);
getch();
}
else
printf("Lista Vacia\n");
system("cls");
break;
case 4:
_exit(0);
default:
printf("Opcion Incorrecta\n");
printf("Ingrese de nuevo: ");
scanf("%d",&op);
system("cls");
break;
}
}while(op!=4);
system("pause");
}
void insertar(struct nodo *p,int x)
{
nodo *nuevo;
nuevo=new nodo;
nuevo->dato=x;
nuevo->sig=NULL;
while(p->sig!=NULL)
p=p->sig;
p->sig=nuevo;
}
void imprimir(struct nodo *p)
{
while(p!=NULL)
{
printf("%d\n",p->dato);
p=p->sig;
}
}

void eliminar(struct nodo *p,int x)


{
nodo *nuevo, *n;
nuevo=p;
n=nuevo;
if(x==p->dato)
{
p = p->sig;
delete nuevo;
}
else
{
nuevo=nuevo->sig;
while(nuevo!=NULL)
{
if(x==nuevo->dato)
{
n->sig=nuevo->sig;
delete nuevo;
break;
}
else
{
n=nuevo;
nuevo=nuevo->sig;
}
}
if(nuevo==NULL)
printf("\nNumero no Existe en la Lista\n");
}
}
int contar(struct nodo *p)
{
int cont=0;
while(p!=NULL)
{
cont++;
p=p->sig;
}
return cont;
}

Marco Prctico

Bibliografa:
http://c.conclase.net/edd/?cap=001f
http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja

Conclusiones:
-Las listas son como arreglos y a la vez como objetos, pero en vez de tener datos
estticos, la direccin de memoria va a apuntar de nodo a nodo, y al utilizar la flecha, se
asemeja a los atributos de un objeto.

Recomendaciones:
-Borrar la pantalla cada cierto nmero de operaciones, solo para no hacerse los con los
resultados.