Lo siento por mi desaparición pero estoy demasiado perdido entre estudiar y trabajar... Además estoy aprendiendo front-end en condiciones y.., le faltan horas a mi día. Creo que me voy a comprar un reloj de esos de 40 horas a ver...
Os traigo un código que les he puesto a mis alumnos de la academia. El enunciado es simple y tal que así:
Crea en C (con cabecera y código separados) una estructura de Array en Nodos, en la que cada Nodo tendrá
como atributos un entero (valor), un entero (tam) y un puntero al siguiente Nodo. Además debes crear las
siguientes funciones:
Crear(Primero* primero, int n) Crea todos los nodos inicializándolos a cero.
Destruir(Primero* primero) Borra todos los nodos, liberando el espacio de disco.
Obtener(Primero primero, int index, int *ok, int *valor) Devuelve en valor el valor de ese trozo de array. En
ok devuelve un 1 si se ha podido y un 0 en caso contrario.
Cambiar(Primero* primero, int index, int valor) Cambia el valor de la posición index por el nuevo valor
Mostrar(Primero primero) Imprime el array.
Aquí tenéis la cabecera:
#ifndef MAIN_H
#define MAIN_H
typedef struct Array* Primero;
struct Array {
int valor;
int tam;
Primero sig;
};
void Crear(Primero* primero, int n);
void Destruir(Primero* primero);
void Obtener(Primero primero, int index, int *ok, int *valor);
void Cambiar(Primero* primero, int index, int valor);
void Mostrar(Primero primero);
#endif /* MAIN_H */
Y aquí os dejo el código:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
/*
*
*/
void Crear(Primero* primero, int n) {
*primero = (Primero)malloc(sizeof(struct Array));
(*primero)->tam = n;
(*primero)->valor = 0;
(*primero)->sig = NULL;
Primero ant = *primero;
int i;
for(i=1; i<n; i++) {
Primero nuevo;
nuevo = (Primero)malloc(sizeof(struct Array));
nuevo->valor=0;
nuevo->tam = (*primero)->tam;
nuevo->sig = NULL;
ant->sig = nuevo;
ant = ant->sig;
}
}
void Destruir(Primero* primero) {
Primero ptr;
while (*primero != NULL) {
ptr=(*primero)->sig;
free((void *)*primero);
*primero=ptr;
}
}
void Obtener(Primero primero, int index, int *ok, int *valor) {
if((*valor)<primero->tam) {
int i;
Primero aux = primero;
for(i = 0; i < index; i++) {
aux = aux->sig;
}
(*valor)=aux->valor;
(*ok) = 1;
} else {
(*ok) = 0;
}
}
void Cambiar(Primero* primero, int index, int valor) {
int i;
Primero aux = *primero;
for(i = 0; i < valor; i++) {
aux = aux->sig;
}
aux->valor = valor;
}
void Mostrar(Primero primero) {
int ultimo = primero->tam;
int i;
printf("{");
for(i=0; i < ultimo-1; i++) {
printf("%d, ", primero->valor);
primero = primero->sig;
}
printf("%d}", primero->valor);
fflush(stdout);
}
int main() {
printf("Vamos a crear un array\n");
fflush(stdout);
Primero p;
Crear(&p, 5);
// int ok;
// int valor;
// Obtener(p, 3, &ok, &valor);
// printf("%d", valor);
// fflush(stdout);
Cambiar(&p, 2, 1);
Cambiar(&p, 3, 4);
Mostrar(p);
Destruir(&p);
return (EXIT_SUCCESS);
}
Pues eso gente, si necesitáis ayuda con algo pedidla por aquí (no me metáis más de 2 faltas de ortografía por palabra por favor) y espero que os sigan sirviendo todas éstas cosillas ;)
Saludos
No hay comentarios:
Publicar un comentario