#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct listacir{
char nombre[40];
struct listacir *siguiente;
};
struct listacir *primero=NULL, *ultimo=NULL;
int numNodos;
int pos;
void insertarUltimo ();
void insertarInicio ();
void insertarIntermedio ();
void visualizar();
void visualizarDesdePosicion();
void visualizarPrimeroUltimo();
void buscar();
void eliminar();
main(){
int opcion;
do{
system("cls");
printf("\n\n\n");
printf("\n************************");
printf("\n 1. Insertar Ultimo");
printf("\n 2. Insertar Primero");
printf("\n 3. Insertar en X posicion");
printf("\n 4. Visualizar");
printf("\n 5. Visualizar desde X posicion");
printf("\n 6. Visualizar Primero y Ultimo");
printf("\n 7. Buscar");
printf("\n 8. Eliminar");
printf("\n 9. Salir");
printf("\n****************************");
printf("\n\n\n");
printf("\nElija una opcion ");
scanf("%d", &opcion);
switch (opcion){
case 1: insertarUltimo();
break;
case 2: insertarInicio();
break;
case 3: insertarIntermedio();
break;
case 4: visualizar();
break;
case 5: visualizarDesdePosicion();
break;
case 6: visualizarPrimeroUltimo();
break;
case 7: buscar();
break;
case 8: eliminar();
break;
case 9: printf("SALIR, GRACIAS POR ESTAR EN EL SISTEMA");
break;
default: system("cls");
break;
}
}while (opcion!= 9);
}
void insertarUltimo(){
system("cls");
struct listacir *nuevo;
nuevo=(struct listacir*)malloc(sizeof(struct listacir));
if(nuevo==NULL)
printf("\n Memoria insuficiente\n");
else{
printf("\n Nombre: ");
fflush(stdin);
gets(nuevo->nombre);
nuevo->siguiente=primero;
if(primero==NULL)
{
primero=nuevo;
ultimo=nuevo;
}else{
ultimo->siguiente=nuevo;
ultimo=nuevo;
}
}numNodos++;
}
void insertarInicio(){
system("cls");
struct listacir *nuevo;
nuevo=(struct listacir*)malloc(sizeof(struct listacir));
if(nuevo==NULL)
printf("Memoria insuficiente\n");
else{
printf("\n Nombre: ");
fflush(stdin);
gets(nuevo->nombre);
ultimo->siguiente = nuevo;
nuevo->siguiente= primero;
primero= nuevo;
numNodos++;
}
}
void insertarIntermedio(){
system("cls");
struct listacir *actual;
struct listacir *nuevo;
nuevo=(struct listacir*)malloc(sizeof(struct listacir));
if (nuevo==NULL)
printf("\nMemoria insuficiente");
if(numNodos < 2)
printf(" \n Numero de nodos insuficiente");
else{
int pos_insertar;
printf("\n Nombre: ");
fflush(stdin);
gets(nuevo->nombre);
printf("\nPosicion: ");
scanf("%d", &pos_insertar);
if((pos_insertar >1)&&(pos_insertar <= numNodos)){
actual=primero;
for(pos =2; pos <pos_insertar; ++pos)
actual=actual->siguiente;
nuevo->siguiente=actual->siguiente;
actual->siguiente = nuevo;
numNodos++;
} }
system("pause");
}
void visualizar(){
system("cls");
struct listacir *aux;
pos=0;
aux=primero;
while(pos< numNodos){
printf("%d.- ", pos+1);
printf(" %s\n", aux->nombre);
aux= aux->siguiente;
pos++;
}
if(numNodos==0)
printf("\nLista vacia");
printf("\n\n\n\n\n");
system("pause");
}
void visualizarPrimeroUltimo(){
system("cls");
if(numNodos==0)
printf("\nLista vacia");
else
printf("\n Primero ------> %s", primero->nombre);
printf("\n Ultimo--------_>%s", ultimo->nombre);
printf("\n\n\n\n");
system("pause");
}
void visualizarDesdePosicion(){
system("cls");
int p=1;
int posicion;
struct listacir *actual;
actual = primero;
printf("\n Indique posicion ");
scanf("%d", &posicion);
system("cls");
for (pos = 2; pos <=posicion; pos++)
{
actual = actual->siguiente;
}
while (p <= numNodos)
{
printf("%s\n", actual->nombre);
actual = actual->siguiente;
p++;
}
printf("\n\n\n\n");
system("pause");
}
void buscar() {
system("cls");
struct listacir *actual;
char aux[40];
int p =1;
int encontrado=0;
actual=primero;
system("cls");
printf("\n Indique nombre a buscar ");
fflush(stdin);
gets(aux);system("cls");
while (p <= numNodos)
{
if(strcmp(aux, actual->nombre)==0){
printf("\n %s EXISTE", aux);
encontrado =1;
}
p++;
actual = actual->siguiente;
}
if (encontrado==0)
printf("\n %s NO EXISTE", aux);
printf("\n\n\n\n\n\n\n");
system("pause");
}
void eliminar(){
system("cls");
struct listacir *aux;
struct listacir *anterior;
pos=1;
int nodo_eliminar;
aux = primero;
printf("\n Indique la posicion del nombre a eliminar ");
scanf("%d", &nodo_eliminar);
if(nodo_eliminar>numNodos || nodo_eliminar <1)
printf("Elemento inexistente");
else{
if(nodo_eliminar==1)
{
aux=primero;
primero = primero ->siguiente;
free(aux);
numNodos--;
}
else if(nodo_eliminar == numNodos)
{
while(pos<numNodos){
if(pos==numNodos-1)
anterior=aux;
pos++;
aux=aux->siguiente;
}
if(pos==0)
printf("Lista vacia\n");
anterior->siguiente=primero;
ultimo=anterior;
free(aux);
numNodos--;
}
else{
while(pos<=numNodos){
if(pos == nodo_eliminar-1)
anterior=aux;
if(pos == nodo_eliminar)
free(aux);
if(pos== nodo_eliminar + 1)
anterior->siguiente=aux;
pos++;
aux = aux->siguiente;
}
numNodos--;
}
printf("\n\n\n\n\n");
system("pause");
}
}
No hay comentarios:
Publicar un comentario