Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- typedef struct nodo{
- int dato;
- struct nodo* siguiente;
- struct nodo* atras;
- }nodo;
- nodo* primero = NULL;
- nodo* ultimo = NULL;
- void insertarNodo();
- void visualizar();
- void visualizarInverso();
- void Menu();
- void eliminarNodo();
- void eliminarNodoValor();
- int main(){
- int opc;
- do{
- Menu();
- scanf("%d",&opc);
- switch (opc){
- case 1: insertarNodo();
- break;
- case 2: visualizar();
- break;
- case 3: visualizarInverso();
- break;
- case 4: eliminarNodo();
- break;
- case 5: return 0;
- break;
- case 6: exit(0);
- break;
- default: printf("nLa opcion ingresada es invalida.nn");
- break;
- }
- }while(opc != 7);
- return 0;
- }
- void Menu(){
- printf("n|-------------------------------------|");
- printf("n| * LISTA DOBLE * |");
- printf("n|-------------------------------------|");
- printf("n| 1. Ingresar un numero entero |");
- printf("n| 2. Mostrar lista en orden |");
- printf("n| 3. Mostrar lista en orden inverso |");
- printf("n| 4. Eliminar un nodo por su indice |");
- printf("n| 5. Eliminar nodos por su valor |");
- printf("n| 6. Salir |");
- printf("n|-------------------------------------|");
- printf("n| Seleccione la opcion a realizar: ");
- fflush(stdout);
- }
- void insertarNodo(){
- nodo* nuevo = (nodo*)malloc(sizeof(nodo));
- printf("n Ingrese un numero entero: ");
- scanf("%d",&nuevo->dato);
- if(primero == NULL){
- primero = nuevo;
- primero -> siguiente = NULL;
- primero -> atras = NULL;
- ultimo = primero;
- }else{
- ultimo->siguiente = nuevo;
- nuevo -> siguiente = NULL;
- nuevo -> atras = ultimo;
- ultimo = nuevo;
- }
- }
- void visualizar(){
- nodo* actual = (nodo*)malloc(sizeof(nodo));
- actual = primero;
- if(primero!=NULL){
- printf("nLista en orden: ");
- while(actual!=NULL){
- printf("%d ",actual->dato);
- actual = actual->siguiente;
- }
- }else{
- printf("n La lista se encuentra VACIA! nn");
- }
- }
- void visualizarInverso(){
- nodo* actual = (nodo*)malloc(sizeof(nodo));
- actual = ultimo;
- if(primero!=NULL){
- printf("nLista en orden inverso: ");
- while(actual!=NULL){
- printf("%d ",actual->dato);
- actual = actual->atras;
- }
- }else{
- printf("n La lista se encuentra VACIA! nn");
- }
- }
- void eliminarNodo(){
- nodo* actual = (nodo*)malloc(sizeof(nodo));
- actual = primero;
- nodo* anterior = (nodo*)malloc(sizeof(nodo));
- anterior = NULL;
- int nodoBuscado = 0, encontrado = 0;
- printf("n Ingrese el numero entero que necesita eliminar: ");
- scanf("%d",&nodoBuscado);
- if(primero!=NULL){
- while(actual != NULL && encontrado != 1){
- if(actual -> dato == nodoBuscado){
- if(actual==primero){
- primero = primero -> siguiente;
- primero -> atras = NULL;
- }else if(actual==ultimo){
- anterior -> siguiente = NULL;
- ultimo = anterior;
- }else{
- anterior -> siguiente = actual -> siguiente;
- actual -> siguiente -> atras = anterior;
- }
- printf("n Nodo eliminado con EXITO! nn");
- encontrado = 1;
- }
- anterior = actual;
- actual = actual -> siguiente;
- }
- if(encontrado == 0){
- printf("n Nodo NO encontrado! nn");
- }else{
- free(anterior);
- }
- }else{
- printf("n La lista se encuentra VACIA! nn");
- }
- }
Add Comment
Please, Sign In to add comment