elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Estructura de datos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estructura de datos en C  (Leído 2,767 veces)
Pizzerino

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Estructura de datos en C
« en: 4 Abril 2018, 19:43 pm »

Buenas, soy nuevo en este foro. Llevo tomando el curso de Programación desde que tengo 17, ahora teniendo 20 y estando en la uni se me dificulta mucho esta materia [Estructura de Datos y Algoritmos], apartir de los temas de Pilas, Colas, Listas ya me perdí completamente. He tomado libros al respecto, internet igual pero no me queda claro. Veo como se definen pero no entiendo, ¿alguna recomendación? o será que está tan fácil que no lo visualizo.

Saludos ;-)


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Estructura de datos en C
« Respuesta #1 en: 4 Abril 2018, 20:04 pm »

Son muchos conceptos así que ¿qué parte no entiendes?
¿Su concepto?
¿Los punteros?
¿Cómo se funcionan?
¿Cómo se desarrollan?

Lo digo porque sabes, a lo mejor, sabes que es una pila pero como fallas en punteros no ves como se desarrolla o sabes de punteros pero no ves diferencia entre pila y lista enlazada.
¿Qué te falla?


En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Estructura de datos en C
« Respuesta #2 en: 4 Abril 2018, 22:46 pm »

No entiendo la gente que hace una carrera de una materia que desconocen completamente,

Para que entiendas lo mínimo cógete el navegador Chrome, vete a la consola, con F12, y en la misma terminal escribe lista=[] pulsa enter y luego escribe lista.push([]) y pulsa nuevamente enter, luego escribe lista[0].push([]) y pulsa enter y luego escribe lista[0].push("hola y adios") y pulsa enter y por último lista.push(lista) pulsa enter y escribe lista y al pulsar enter analiza el árbol del contenido y despliega sus ramas  :xD eso es una lista enlazada, ahora aplícalo con los amigables punteros en vez de referencias... pero como dice MAFU, es importante saber que es un puntero, como funciona, como se declara etc... para pasar a cosas mayores.
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Estructura de datos en C
« Respuesta #3 en: 5 Abril 2018, 01:15 am »

te dejo esta lista de reproducción para que le eches un ojo
https://www.youtube.com/playlist?list=PLTd5ehIj0goMTSK7RRAPBF4wP-Nj5DRvT
En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Estructura de datos en C
« Respuesta #4 en: 5 Abril 2018, 17:12 pm »

 Uff! El tema es muy denso para explicar en un sólo mensaje. Pero
 vamos a intentarlo. Intenta, en un primer momento, olvidar que sabes
 C/C++ o cualquier otro lenguaje.

  Sabes, desde los 10 años, que los enteros ( o los naturales,
 racionales) son un tipo de números dotados de ciertas operaciones (la
 suma, el producto...).  Allá por el último cuarto del siglo XIX, los
 matemáticos europeos (Dedekind, Hilbert, Noether, Peano, Cantor y
 otros... ) intentaban caracterizar las propiedades de esos "entes" y
 sus operaciones. Te sonaran las propiedades commutativa, asociativa,
 y algún valor especial como el elemento neutro,

Código:
sets
 int
 operations
 + : (int, int) -> int
 constants
 0 : int
 axioms
 a + b = b + a  [comm]
 (a + b) + c = a + (b + c)  [assoc]
 a + 0 = a  [e.neutro]
 ....

 y los términos anillo, semigrupo, grupo conmutativo...

 En computación, esos enteros y sus operaciones tienen una
 representación trivial y limitada en el computador (int, con MAX_INT,
 etc...)  que se proyecta en palabras de 8 o 16 bits y operaciones
 básicas en la ALU...

 Sin embargo, en algoritmia se necesitan además otros "tipos de
 datos", como los que mencionas, (pila, cola, listas...) que también
 se caracterizan por unas propiedades. Éstas también se pueden
 expresar algebraicamente (aunque ya casi nadie lo practica, :-( )
 
 En el caso de las pilas de enteros (stack), la estructura lineal más
 sencilla, tenemos 3/4 operaciones.

 Las operaciones, grosso modo, se dividen en tres grupos.
 - constructoras
 - modificadoras
 - consultoras.

Código:
sets
 stack, int, bool
 constants
 empty : stack
 operations
 push : (stack,int) -> stack
 pop  : stack - -> stack
 head : stack - -> int
 isempty : stack -> bool
 var
 i : int
 p : stack
 axioms
 pop(push(p,i))=p
 head(push(p,i))=i
 isempty(empty)=true
 ...

 El primer axioma dice que al quitar (pop) un elmento de una pila (p)
 a la que por lo menos se le ha añadido (push) un entero (i), nos
 queda esa pila sin el elemento. Esto también lo sabes "por sentido
 común", pero la novedad, repito, es la forma matemática, cuyo origen
 debemos a los europeos del finales del s. XIX.
 

 Y aquí entra el lenguaje C. Como no están implementadas a nivel
 hardware, el lenguaje nos permite "simularlas" (ojo a la palabra, es
 clave) con construcciones que tienen su base en elementos conocidos,
 como arrays, punteros...


 Los que programan la STL de C++ las ponen a tu disposición una serie
 de estructuras (<stack>, <queue>, <list>) para que las uses en tus
 algoritmos. Son de muy alta calidad y su implementación escapa a la
 de cualquier principiante.

 Pero podemos experimentar haciéndo las nuestras "de juguete".

 - Para empezar, lo haremos con memoria estática, (arrays...)  

 - En otro correo, si quieres, las podemos hacer con memoria dinámica
 (punteros)

 Observa que, al igual que con los int, al usar una array fijo de
 elementos, la expresividad de nuestra implementación esta limitada a
 un número maximo de elementos apilados.  

 Al margen de esto, una operación no es aplicable siempre, como la
 división por 0. Es el caso de la operación pop, o head. No son aplicables
sobre pilas vacías

 En esos casos, su comportamiento está indefinido, por eso se emplea
 la libreria <assert.h>.


Código
  1. #ifndef _STACK_TOY_
  2. #define _STACK_TOY_
  3. #define MAXIMUM 200
  4.  
  5. #include <assert.h>
  6.  
  7. typedef struct
  8. {
  9.  // I : 0 <= many <= MAXIMUM
  10.  unsigned int many;
  11.  unsigned int M[MAXIMUM];
  12. } STACK, *PSTACK;
  13.  
  14. void empty( PSTACK pstack)
  15. {
  16.  pstack->many = 0 ;
  17. }
  18.  
  19. void push(PSTACK pstack, const int i)
  20. {
  21.  assert((pstack->many)<MAXIMUM);
  22.  pstack->M[pstack->many++]=i;
  23.  return;
  24. }
  25.  
  26. void pop(PSTACK pstack)
  27. {
  28.  assert((pstack->many)>0);
  29.  pstack->many--;
  30.  return;
  31. }
  32.  
  33.  
  34. int head(const PSTACK pstack)
  35. {
  36.  assert((pstack->many)>0);
  37.  return pstack->M[pstack->many -1];
  38. }
  39.  
  40. int isempty(const PSTACK pstack)
  41. {
  42.  return  (pstack->many == 0 );
  43. }
  44.  
  45.  
  46. #endif

« Última modificación: 5 Abril 2018, 21:27 pm por dijsktra » En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructura de datos
Programación General
EFEX 1 2,554 Último mensaje 27 Junio 2011, 14:25 pm
por EFEX
¿Alguién conoce un buen curso/libro de minería de datos y estructura de datos?
Programación General
Aikanáro Anário 0 1,891 Último mensaje 30 Agosto 2012, 23:06 pm
por Aikanáro Anário
estructura de datos
Programación C/C++
manutmac 1 1,860 Último mensaje 11 Diciembre 2012, 04:09 am
por twins
estructura de datos « 1 2 »
Programación C/C++
juanks92 10 4,697 Último mensaje 23 Abril 2013, 06:43 am
por rir3760
Estructura de datos
Programación C/C++
juanks92 0 1,379 Último mensaje 22 Abril 2013, 23:20 pm
por juanks92
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines