#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<dos.h>
#define MAX 100
#define Valor_Error -9999
typedef int tipo_dato;
typedef int posicion;
typedef int logico;
struct Lista {
tipo_dato elems[MAX];
posicion ultimo;
};
typedef struct Lista lista;
void Inicializa(lista &L);
void Elementos(lista &L);
void Elimina(lista &L);
logico Vacia(lista L);
logico Llena(lista L);
posicion Fin(lista L);
posicion Primero(lista L);
posicion Ultimo(lista L);
logico Inserta(tipo_dato x, posicion p, lista &L);
logico Eliminar(posicion p, lista &L);
posicion Localiza(tipo_dato x, lista L);
void Imprime(lista L);
void ImprimeImp(lista L);
tipo_dato RecuperaValor(posicion p, lista L);
int menu();
void main(){
int n, i, posicion,opc, ind;
tipo_dato x;
lista LISTA;
Inicializa(LISTA);
do{
ind=1;
opc=menu();
switch(opc){
case 1:
Elementos(LISTA);
break;
case 2:
Elimina(LISTA);
break;
case 3:
clrscr();
Imprime(LISTA);
getch();
break;
case 4:
clrscr();
ImprimeImp(LISTA);
getch();
break;
case 5:
Inicializa(LISTA);
clrscr();
printf("Lista Vacia");
getch();
break;
case 6:
clrscr();
gotoxy(4,12);
printf("\n Juan Marcos Rodriguez x1p0 Networks inc. copyright 2002A");
getch();
ind=0;
break;
default: printf("Opcion Inexistente");
getch();
break;
}
}while (ind ==1);
}
int menu(){
int c;
clrscr();
printf("\n\n M E N U ");
printf("\n 1.- Insertar Elementos\n\n");
printf("\n 2.- Eliminar Elementos\n\n");
printf("\n 3.- Imprimir Lista\n\n");
printf("\n 4.- Imprimir Numeros Impares\n\n");
printf("\n 5.- Borrar Toda la lista\n\n");
printf("\n 6.- Salida\n\n");
printf("\n\n\n\n Elige una opcion ");
scanf("%d",&c);
return(c);
}
void Inicializa(lista &L) {
L.ultimo=-1;
}
logico Vacia(lista L) {
if(L.ultimo==-1)
return(1);
else
return (0);
}
logico Llena(lista L){
if(L.ultimo==MAX-1)
return(1);
else
return(0);
}
posicion Fin(lista L) {
return(L.ultimo+1);
}
posicion Primero(lista L) {
if(Vacia(L))
return(-1);
else
return(0);
}
posicion Ultimo(lista L) {
return(L.ultimo);
}
logico Inserta(tipo_dato x, posicion p, lista &L) {
int i;
if(Llena(L)|| (p<Primero(L) || p>Fin(L)))
return(0);
else
{
for(i=L.ultimo; i>=p; i--)
L.elems[i+1]=L.elems[i];
L.elems[p]=x;
L.ultimo++;
return(1);
}
}
logico Eliminar(posicion p, lista &L) {
int i;
if(Vacia(L)||(p<0||p>Fin(L)))
return (0);
else
for(i=p; i<Ultimo(L); i++)
L.elems[i]=L.elems[i+1];
L.ultimo--;
return(1);
}
posicion Localiza(tipo_dato x, lista L) {
if(Vacia(L))
return(-1);
else
{
int pos=0;
while (pos <=Ultimo(L) && L.elems[pos]!=x)
pos ++;
if(pos >Ultimo(L))
return(-1);
else
return(pos);
}
}
tipo_dato RecuperaValor(posicion p, lista L) {
if(!Vacia(L) && p>= Primero(L) && p<=Ultimo(L))
return(L.elems[p]);
else
return(Valor_Error);
}
void Imprime(lista L)
{
int i;
if(Vacia(L))
printf("\nLa lista est vac¡a\n");
else
{
for(i=0; i<=L.ultimo; i++)
printf("\n%d.- %d\n",i+1, L.elems[i]);
}
}
void ImprimeImp(lista L){
int i;
if (Vacia(L))
printf("\nLista Vacia");
else{
for(i=0; i<=L.ultimo; i++)
if ((L.elems[i]%2)!=0)
printf ("\n%d.-%d",i+1, L.elems[i]);
}
}
void Elementos(lista &L){
int n,i;
tipo_dato x;
clrscr();
printf("¨Cu ntos elementos deseas insertar a la lista?\n");
scanf("%d", &n);
for (i=1; i<=n; i++)
{
printf("\nElemento %d: \n",i);
scanf("%d", &x);
Inserta(x, Fin(L), L);
}
clrscr();
Imprime(L);
getch();
}
void Elimina(lista &L){
tipo_dato x;
posicion posicion;
clrscr();
if (Vacia(L)){
Imprime (L);
getch();}
else{
Imprime(L);
printf("\nPara eliminar un elemento de la lista:\n");
printf("Dime qu‚ elemento deseas eliminar:\n");
scanf("%d", &x);
posicion=Localiza(x, L);
while (posicion!=-1){
Eliminar(posicion, L);
posicion=Localiza(x,L);}
Imprime(L);
getch();
}
}
Comentarios sobre la versión: Versión 1 (3)