Dev - C++ - ESTRUCTURA DINAMICA DE DATOS

 
Vista:

ESTRUCTURA DINAMICA DE DATOS

Publicado por JORGE LUIS TORRES (1 intervención) el 23/11/2016 01:28:15
TENGO ESTE PROGRAMA DE ESTRUCUTURA DE DATOS DINAMICAS EL CUAL INSERTAS UNA LETRA Y TE LAS ACOMODA DE MENOR A MAYOR Y TE BORRA LA QUE ESCOJAS. PERO LO TENGO QUE CONVERTIR A TIPO PILA QUE EL ULTIMO QUE ENTRE SEA EL QUE SALGA Y QUE ACOMODE LAS LETRAS CONFORME ENTREN AYUDA.........................!!!!!!!!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#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");
   }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder