Matrices y pilas

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Matrices y pilas

Notapor johndoe90 » Jue Mar 05, 2009 11:15 pm

Hola, estoy estudiando este interesante tema de pilas y colas. He hecho un ejercicio que devuelve al revés una seria de numeros, me gustaria saber si esta bien, en especial las funciones. Adjunto el codigo en C. Gracias.

#include <stdio.h>
#define MAXPILA 5

typedef struct
{
int pilavector[MAXPILA];
int cimpila;
}Tpila;

void crear_pila(Tpila *pila)
{
pila->cimpila=-1;
}

int pila_vacia(Tpila pila)
{
if (pila.cimpila=-1)
{
return 1;
}
else
{
return 0;
}
}

int pila_llena(Tpila pila)
{
return (pila.cimpila==MAXPILA-1);
}


void pushpila(Tpila *pila, int n)
{
pila->pilavector [++pila->cimpila] = n;
}

int poppila(Tpila *pila)
{
return pila->pilavector[pila->cimpila];
pila->pilavector[--pila->cimpila];
}



void main ()
{
Tpila mi_pila;
int n;

crear_pila (&mi_pila);
printf ("Escribe el primer número de la secuencia\n");
scanf ("%d",&n);
while (n!=0)
{
if (!pila_llena (mi_pila))
pushpila (&mi_pila,n);
else
printf ("La pila ya está llena\n");
printf ("Escribe el siguiente número de la secuencia\n");
scanf ("%d",&n);
}
printf("Ahora los números al revés\n");
while (!pila_vacia (mi_pila))
{
poppila(&mi_pila);
printf ("%d",&n);
}
}

Tengo otra duda, para meter matrices de este tipo en una pila como podria ser? Adjunto la siguiente estructura con la que trabajo.

#include<stdio.h>
#define MAXF 5
#define MAXC 5
#define MAXP 20
#define MAXD 10
#define MAXPILA 5


typedef char Tpalabra[MAXP];
typedef char Tcarnet[MAXD];

typedef struct
{
Tpalabra nombre;
int edad;
Tcarnet dni;
}Tpersona;

typedef struct
{
Tpersona persona[MAXF][MAXC];
float porciento;
Tpalabra id;
}Ttren;

typedef struct
{
int pilavector [MAXPILA];
int cimpila;
}Tpila;

Gracias.
johndoe90
 
Mensajes: 5
Registrado: Jue Mar 05, 2009 11:04 pm

Notapor Juan Carlos » Vie Mar 06, 2009 2:50 am

Hola,

En el codigo de la funcion pop, hay una sentencia que disminuye el contador pero dicha sentencia esta por debajo del return, haciendo que esa linea no se ejecute (y el contador no disminuya) Una posible solucion seria:

Código: Seleccionar todo
int poppila(Tpila *pila)
{
  --pila->cimpila;
  return pila->pilavector[pila->cimpila+1];
}


Para hacer una pila de matrices debes cambiar esto:

Código: Seleccionar todo
int pilavector [MAXPILA];


por esto:

Código: Seleccionar todo
MATRIZ pilavector [MAXPILA];


donde MATRIZ es el tipo de tu matriz.

Existe otras formas para crear pilas totalmente genericas utilizando "punteros a void", o usando templates (solo para C++).

Saludos
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor endaramiz » Vie Mar 06, 2009 8:27 am

Hola, sería conveniente que pusieras el texto entre las etiquetas 'code'.
He visto que en el código especificas un máximo a la pila. Quizás te interese esto: http://c.conclase.net/edd/index.php?cap=000

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado