Título: ESTRUCTURAS DINAMICAS DE DATOS TIPO PILA Publicado por: macabro5000 en 23 Noviembre 2016, 01:25 am DISCULPEN TENGO ESTE PROGRAMA EN C DE UNA ESTRUCTURA DINAMICA DE DATOS PERO LO TENGO COMPONER PARA Q SEA DE TIPO PILA QUE EL ULTIMO DATO QUE ENTRA SALGA NECESITO AYUDAAAA PORFAAA...
#include <stdio.h> #include <stdlib.h> struct listNodo { char dato; struct listNodo *sigPtr; }; typedef struct listNodo LISTNODO; typedef LISTNODO *LISTNODOPTR; void insertar(LISTNODOPTR *, char); char borrar(LISTNODOPTR *, char); int estaVacio(LISTNODOPTR); void imprimeLista(LISTNODOPTR); void instrucciones(void); int main() { LISTNODOPTR inicioPtr = NULL; int opcion; char letra; instrucciones(); //mostrar el menu printf(" ? "); scanf("%d", &opcion); while(opcion != 3) { switch (opcion){ case 1: printf("Introduce una letra: "); scanf("\n%c", &letra); insertar(&inicioPtr, letra); imprimeLista(inicioPtr); break; case 2: if(!estaVacio(inicioPtr)) { printf("Introduce letra a borrar: "); scanf("\n%c", &letra); if(borrar(&inicioPtr, letra)) { imprimeLista(inicioPtr); } else printf("%c no encontrada. \n\n", letra); } else printf("La lista esta vacia.\n\n"); break; default: printf("Opcion no valida.\n\n"); instrucciones(); break; } printf(" ? "); scanf("%d", &opcion); } printf("Fin de corrida.\n"); return 0; } //Despliega las instrucciones void instrucciones(void) { printf(" Introduce tu opcion:\n" " 1 para insertar una letra en la lista.\n" " 2 para borrar una letra de la lista.\n" " 3 para terminar.\n"); } //Insertar una letra en la lista en orden alfabetico void insertar(LISTNODOPTR *sPtr, char valor) { LISTNODOPTR nuevoPtr, anteriorPtr, actualPtr; nuevoPtr = malloc(sizeof(LISTNODO)); if(nuevoPtr != NULL) { //hay espacio disponible nuevoPtr->dato = valor; nuevoPtr->sigPtr = NULL; anteriorPtr = NULL; actualPtr = *sPtr; while(actualPtr != NULL && valor > actualPtr->dato) { anteriorPtr = actualPtr; //avanzar hasta... actualPtr = actualPtr->sigPtr; //...el siguente nodo } if(anteriorPtr == NULL) { nuevoPtr->sigPtr = *sPtr; *sPtr = nuevoPtr; } else { anteriorPtr->sigPtr = nuevoPtr; nuevoPtr->sigPtr = actualPtr; } } else printf("%c no isertada. " "No hay memoria disponible.\n", valor); } //Borrar una letra de la lista char borrar(LISTNODOPTR *sPtr, char valor) { LISTNODOPTR anteriorPtr, actualPtr, temporalPtr; if(valor==(*sPtr)->dato){ temporalPtr =*sPtr; *sPtr= (*sPtr)->sigPtr; //quitar el nodo de la lista free(temporalPtr); //liberar memoria return valor; } else{ anteriorPtr= *sPtr; actualPtr= (*sPtr)->sigPtr; while(actualPtr != NULL && actualPtr->dato != valor){ anteriorPtr =actualPtr; //avanzar hasta... actualPtr= actualPtr->sigPtr; //..el sgte nodo } if(actualPtr !=NULL){ temporalPtr =actualPtr; anteriorPtr->sigPtr = actualPtr->sigPtr; return valor; } } return '\0'; } //Retornar 1 si la lista está vaacía, , 0 si no int estaVacio(LISTNODOPTR sPtr) { return sPtr == NULL; } //Imprime la lista void imprimeLista(LISTNODOPTR actualPtr) { if(actualPtr == NULL) printf("La lista esta vacia.\n\n"); else { printf("La lista es:\n"); while(actualPtr != NULL) { printf("%c -->", actualPtr->dato); actualPtr = actualPtr->sigPtr; } printf("NULL\n\n"); } } |