Código:
#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); 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: Inicializa(LISTA); clrscr(); printf("Lista Vacia"); getch(); break; default: printf("La Opcion No Existe"); 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.- 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 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(); } }