jueves, 5 de marzo de 2015

LinkedArray en C

Hola gente, cuánto tiempo!! :)
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