Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - macabro5000

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