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");
}
}