Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***************************************************************************************************************************
- CONSIGNA:
- Escriba un programa que escriba una línea de texto y utilice una pila para imprimir por pantalla la línea invertida.
- ***************************************************************************************************************************/
- // Librería estandar
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_SIZE 128
- // Estructura nodo
- struct nodo_struct
- {
- char c; // Letra
- struct nodo_struct *sig; // Nodo siguiente
- };
- // Tipos de datos
- typedef struct nodo_struct new_nodo; // new_nodo creará un nuevo nodo tipo struct.
- typedef new_nodo * ptr_nodo; // ptr_nodo creará un puntero a un nodo.
- // Funciones
- char strpos_(char str[], unsigned int pos);
- char * strcat_(char str[], char c);
- // Funciones de lista
- void push(ptr_nodo *ptrHead, char letra); // Agrega un elemento a la lista.
- char pop(ptr_nodo *ptrHead); // Saca un elemento de la lista.
- int lista_isNull(ptr_nodo lista); // ¿Está vacía la lista?
- // Main
- int main(int argc, char *argv[])
- {
- // Declaramos las variables:
- char str[MAX_SIZE]; // str: string conteniendo el texto original.
- char m_str[MAX_SIZE]; // m_str: string conteniendo el texto invertido (modificado).
- ptr_nodo ptrInicio = NULL; // ptrInicio: puntero al inicio de la lista.
- int i; // i: contador.
- // Inicio del programa, se solicita cargar un texto para invertir.
- printf("Ingrese el texto a invertir: ");
- scanf("%128[^\n]s", str);
- // Se borra la pantalla para mostrar los resultados.
- system("CLS");
- // Cargamos la lista desde la variable str.
- for(i = 0; i < strlen(str); i++)
- {
- push(&ptrInicio, strpos_(str, i));
- }
- // Mostramos el texto original.
- printf("--> Su texto: %s\n", str);
- // Descargamos la lista en la variable m_str.
- while(!lista_isNull(ptrInicio))
- {
- strcat_(m_str, pop(&ptrInicio));
- }
- // Mostramos el texto invertido
- printf("---> Texto invertido: %s\n", m_str);
- system("PAUSE");
- return 0;
- }
- // Funcion strpos_ devuelve el char de str[] en pos.
- char strpos_(char str[], unsigned int pos)
- {
- return (char)str[pos];
- }
- // Función strcat_
- char * strcat_(char str[], char c)
- {
- int i;
- for(i = 0; str[i] != '\0'; i++);
- str[i++] = c;
- str[i] = '\0';
- return str;
- }
- // Funciones de lista (pila):
- // Funcion push (agregar un elemento a la lista)
- void push(ptr_nodo *ptrHead, char letra)
- {
- ptr_nodo ptrNuevo;
- ptrNuevo = malloc(sizeof(new_nodo));
- if(ptrNuevo)
- {
- ptrNuevo->c = letra;
- ptrNuevo->sig = *ptrHead;
- *ptrHead = ptrNuevo;
- }
- else
- printf("-> Error al insertar nuevo dato. Memoria insuficiente.\n");
- }
- // Funcion pop (quitar un elemento a la lista)
- char pop(ptr_nodo *ptrHead)
- {
- ptr_nodo ptrTmp;
- char ret;
- ptrTmp = *ptrHead;
- ret = (*ptrHead)->c;
- *ptrHead = (*ptrHead)->sig;
- free(ptrTmp);
- return ret;
- }
- // ¿Está vacía la lista?
- int lista_isNull(ptr_nodo lista)
- {
- return lista == NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment