elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ESTRUCTURAS DINAMICAS DE DATOS TIPO PILA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ESTRUCTURAS DINAMICAS DE DATOS TIPO PILA  (Leído 1,545 veces)
macabro5000

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ESTRUCTURAS DINAMICAS DE DATOS TIPO PILA
« 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");
   }
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
estructuras dinamicas
Java
SAGA-gl 0 1,437 Último mensaje 26 Abril 2014, 21:22 pm
por SAGA-gl
estructuras dinamicas
Programación C/C++
MessageBoxA 3 2,669 Último mensaje 3 Noviembre 2014, 11:12 am
por eferion
Compilación C# - Estructuras Dinamicas
.NET (C#, VB.NET, ASP)
Castiel 6 5,699 Último mensaje 14 Febrero 2015, 23:52 pm
por Castiel
Estructuras dinámicas de datos" listas"
.NET (C#, VB.NET, ASP)
rafaelo 3 3,859 Último mensaje 22 Octubre 2015, 06:35 am
por Draven Schwielicht
C# - Estructuras dinámicas: Listas tipo Pila - Problema de aplicación
Dudas Generales
Nolohagan 5 4,945 Último mensaje 15 Julio 2016, 22:48 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines