Initial commit
This commit is contained in:
commit
f30f7a6449
10 changed files with 1126 additions and 0 deletions
77
list.c
Normal file
77
list.c
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <stdio.h>
|
||||
// Single linked list with a single type
|
||||
#if 0
|
||||
#define MAKE_LIST(type) \
|
||||
struct type##_node_t; \
|
||||
typedef struct { \
|
||||
type data; \
|
||||
struct type##_node_t *next; \
|
||||
} type##_node_t; \
|
||||
typedef struct type##_node_t* type##_node_t_ptr
|
||||
|
||||
|
||||
MAKE_LIST(int);
|
||||
MAKE_LIST(char);
|
||||
#endif
|
||||
|
||||
// Single linked list with fat struct
|
||||
|
||||
#if 1
|
||||
typedef struct node_ node_t;
|
||||
typedef struct node_* node_ptr;
|
||||
typedef enum { INT, UINT, CHAR, FLOAT, DOUBLE, CHAR_PTR } node_value_t;
|
||||
|
||||
typedef struct node_ {
|
||||
int type;
|
||||
union {
|
||||
int vi;
|
||||
unsigned int vii;
|
||||
char cv;
|
||||
float fv;
|
||||
double dv;
|
||||
void *ptr;
|
||||
};
|
||||
node_ptr* children;
|
||||
//node_ptr prev;
|
||||
} node_t;
|
||||
#endif
|
||||
// Time (single-linked) Time (double-linked)
|
||||
// Insertar al principio O(1) O(1)
|
||||
// Insertar al final O(n) / O(1) O(n) / O(1)
|
||||
// Insertar arbitrario O(n) O(n/2) / O(1)
|
||||
// Borrar arbitrario O(n) O(n/2) / O(1)
|
||||
// Buscar O(n) O(n/2) / O(1)
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
node_t node1 = { INT, { .vi = -1 }, 0 };
|
||||
node_t node2 = { UINT, { .vii = 1 }, 0 };
|
||||
node_t node3 = { CHAR, { .cv = 'v' }, 0 };
|
||||
node1.next = &node2;
|
||||
node2.next = &node3;
|
||||
|
||||
node_ptr n = &node1;
|
||||
do {
|
||||
switch(n->type) {
|
||||
case INT:
|
||||
printf("%d\n", n->vi);
|
||||
break;
|
||||
case UINT:
|
||||
printf("%d\n", n->vii);
|
||||
break;
|
||||
case CHAR:
|
||||
printf("%c\n", n->cv);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} while ((n = n->next));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* int num = (int)this; */
|
||||
|
||||
/* &(this->mem) */
|
||||
/* int *member = num + offsetof(node_t, next); */
|
||||
/* *member = 1; */
|
||||
Loading…
Add table
Add a link
Reference in a new issue