Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- // Declaracion de la estructura de base
- typedef struct Node {
- int data;
- struct Node *next;
- } Node;
- // procedimiento de insercion, recibe la lista por referencia
- // para poder modificar el valor del apuntador que recibe
- void set_insert(Node **list, int value) {
- // genera nuevo nodo
- Node *new_node, *last_node, *actual_node;
- new_node = malloc(sizeof(Node));
- if (!new_node) {
- return;
- }
- // da un valor a los nuevos nodos
- new_node->data = value;
- new_node->next = NULL;
- // en caso de que la lista esté vacía, hacer el nuevo nodo el inicio de la lista
- if (!*list) {
- *list = new_node;
- return;
- }
- // en caso de que la lista exista...
- last_node = *list;
- actual_node = (*list)->next;
- // impedir duplicados
- if((*list)->data == value) {
- return;
- }
- // ... busca el elemento que se mayor o igual al valor pasado por argumento
- while ( (actual_node) && (actual_node->data < value) ) {
- last_node = actual_node;
- actual_node = actual_node->next;
- }
- // impedir duplicados
- if ( (actual_node) && (actual_node->data == value) ) {
- return;
- }
- // el nuevo elemento es de menor valor al del inicio de la lista, insertarlo antes.
- if (*list == last_node && ((*list)->data > value)) {
- new_node->next = *list;
- *list = new_node;
- return;
- }
- // inserción del elemento dentro de la lista
- if (actual_node) { // si no es el final de la lista se inserta entre dos elementos
- new_node->next = actual_node;
- }
- last_node->next = new_node;
- }
- void set_free(Node *list) {
- Node *aux;
- while(list) {
- aux = list;
- list = list->next;
- free(aux);
- }
- }
- bool set_has(Node *list, int value) {
- while(list) {
- if(list->data == value) {
- return true;
- }
- list = list->next;
- }
- return false;
- }
- void set_show(Node *actual) {
- while (actual) {
- printf("%d ", actual->data);
- actual = actual->next;
- }
- }
- void hashTable_insert(Node* hashTable[], int value) {
- int index = value % 5;
- set_insert(&hashTable[index], value);
- }
- void hashTable_free(Node* hashTable[]) {
- for(int i = 0; i < 5; ++i) {
- set_free(hashTable[i]);
- }
- }
- bool hashTable_has(Node* hashTable[], int value) {
- int index = value % 5;
- return set_has(hashTable[index], value);
- }
- void hashTable_show(Node* hashTable[]) {
- for(int i = 0; i < 5; ++i) {
- set_show(hashTable[i]);
- puts("");
- }
- }
- int main() {
- Node* hashTable[5] = {0};
- for(int i=0; i<25; ++i) {
- hashTable_insert(hashTable, rand() % 100);
- }
- hashTable_show(hashTable);
- int value = 100;
- printf("El %d esta en la tabla: %s\n", value, hashTable_has(hashTable, value)? "cierto" : "falso");
- hashTable_free(hashTable);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement