From 5ecd7d42c7af28483283470ebe3c3cb04086f672 Mon Sep 17 00:00:00 2001 From: Anton Dolozin Date: Tue, 4 Nov 2025 22:40:17 +0100 Subject: [PATCH] Trying hashmaps --- du5/Makefile | 13 +++++++ du5/a_station.c | 63 +++++++++++++++++++++++++++++++++ du5/a_station.h | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ du5/a_station.o | Bin 0 -> 4440 bytes du5/main.c | 41 ++++++++++++++++++++++ du5/main.o | Bin 0 -> 6856 bytes du5/station | Bin 0 -> 35368 bytes 7 files changed, 208 insertions(+) create mode 100644 du5/Makefile create mode 100644 du5/a_station.c create mode 100644 du5/a_station.h create mode 100644 du5/a_station.o create mode 100644 du5/main.c create mode 100644 du5/main.o create mode 100755 du5/station diff --git a/du5/Makefile b/du5/Makefile new file mode 100644 index 0000000..8cec7f4 --- /dev/null +++ b/du5/Makefile @@ -0,0 +1,13 @@ +CFLAGS= -std=c99 -g -Wall -Werror + +all: station + +%.o: %.c + gcc -c -o $@ $< $(CFLAGS) + +station: main.o a_station.o + gcc $(CFLAGS) main.o a_station.o -o station + +clean: + rm *.o station + diff --git a/du5/a_station.c b/du5/a_station.c new file mode 100644 index 0000000..be8814c --- /dev/null +++ b/du5/a_station.c @@ -0,0 +1,63 @@ +#include "a_station.h" +#include +#include +#include + +struct station* create_station(){ + struct station* station = (struct station*)calloc(1,sizeof(struct station)); + station->tracks = (struct car**)calloc(STATION_SIZE, sizeof(struct car*)); + station->track_count = STATION_SIZE; + return station; +} + +void destroy_station(struct station* station){ + free(station->tracks); + free(station); +} + +int select_track(struct station* station, const char* target){ + int hash = 0; + for (int i = 0; i < strlen(target); i++) + { hash += target[i]; + + } + hash = hash %station->track_count; + + + return hash; +} + +void add_target_capacity(struct station* station,const char* target, int capacity){ + struct car* ptr = *station->tracks; + int count = 0; + int res = select_track(station, target); + while(count != res){ + + ptr = ptr->next; + count++; + + } + if(!ptr){ + ptr = (struct car*)calloc(capacity, sizeof(struct car)); + ptr->capacity = capacity; + strcpy(ptr->value, target); + ptr->next = NULL; + return; + } + ptr->capacity += capacity; + + +} + +int get_target_capacity(struct station* station,const char* target){ + return 0; +} + +int count_targets(struct station* station){ + return 0; +} + +int count_capacity(struct station* station){ + return 0; +} + diff --git a/du5/a_station.h b/du5/a_station.h new file mode 100644 index 0000000..ce8c733 --- /dev/null +++ b/du5/a_station.h @@ -0,0 +1,91 @@ +#ifndef STATION_H +#define STATION_H +// Pocet trati k dispozicii +#define STATION_SIZE 10 +// Maximalny pocet znakov pre ulozenie nazvu cielovej stanice +#define TARGET_SIZE 36 + +/** + * Jeden zaznam o kapacite do cielovej stanice + */ +struct car { + // Cielova stanica / nazov + char value[TARGET_SIZE]; + // Pocet cestujuchich + int capacity; + // Smernik na dalsi zaznam + struct car* next; +}; + +/** + * Cela databaza zaznamov + */ +struct station { + // Dynamicke pole smernikov na zaznamy + // jeden zaznam ma typ struct car* + struct car** tracks; + // Velkost pola tracks + int track_count; +}; + + +/** + * Vytvori prazdnu stanicu. + * Alokuje pole smernikov tracks na pociatocnu kapacitu STATION_SIZE + * nastavi velkost capacity na STATION_SIZE + * @return smernik na prazdnu stanicu + */ +struct station* create_station(); + +/** + * Uvolni pamat + * @param smernik na databazu + */ +void destroy_station(struct station* station); + +/** + * Vyberie poziciu v poli station->tracks pre ulozenie zaznamu target + * + * Proces vyberu by mal splnat kriteria pre hash funkciu: + * - rovnaky retazec by mal vzdy mat rovnaky vysledok + * - pre rozne retazce by mali byt vysledky co najviac rozne + * + * @param smernik na databazu + * @param nazov cielovej stanice + * @return cislo v intervale 0 az N-1, kde N je station->track_count + */ +int select_track(struct station* station, const char* target); + +/** + * Zvysi zaznam o pocte cestujucich do danej cielovej stanice. + * + * Najprv sa vyberie cielova trat pomocou select_track(). Ak zaznam neexistuje, + * vytvori sa novy. Ak zaznam na danej trati (spojkovom zozname) existuje, cislo sa pripocita. + * V databaze nesmu byt dva zaznamy s rovnakou cielovou stanicou. + * + * @param smernik na databazu + * @param nazov cielovej stanice + */ +void add_target_capacity(struct station* station,const char* target, int capacity); + +/** + * Ziska zaznam o cielovej stanici. + * @param smernik na databazu + * @param nazov cielovej stanice + * + * @return kapacitu do cielovej stanice. Ak sa zaznam nenachedza, vrati nula. + */ +int get_target_capacity(struct station* station,const char* target); + +/** + * Spocita pocet cielovych stanic + * @param smernik na databazu + */ +int count_targets(struct station* station); + +/** + * Spocita kapacitu vo vsetkych zaznamoch + * @param smernik na databazu + */ +int count_capacity(struct station* station); +#endif diff --git a/du5/a_station.o b/du5/a_station.o new file mode 100644 index 0000000000000000000000000000000000000000..2ae49c96475d15d2e40ca5e7e55018eb6b83f8e2 GIT binary patch literal 4440 zcma)AeQZ()tVT2ho|zjNPx zN$e7JS32)}pL_1T=YH6~|M;Ju1c@|4mGSz7?R!+^*Y7Wj#mocaS?P3vm6h>k)O_t?CE7K$kO!Rg zSS4Q08qE}8Um4G>=4-#oFNnG+OQ?c1%~XDL%u1Ea@!T`RxwL5xY?q0s&jB@Gw-x_1 zikO$^9P(3Lm4$cKH#?lmuuElrJ!-yQQ~4#T?7)9OJSAE+p2>?`QGb6{^YtY=482#a zh-Fk3ZzJT50J|@ADgbC~#PVBUIi-tXqBnqf+YJJ^u?+){n}?xF3)KJL7N_Xlh2z@v zLLZ%p(&P=zHF*QxFW>gkd_n^cV1Cw{m`9THcY$|llY2Y-G;U?;D3Iqb?%Nq^NS&xSu|({^HDczOwQm;n!jz>zO#B_-lx$& zUe}1r3HrqRUD)`C@Ak}w5;H!{Z_L79>1KR_YGx7ZUyF+kte>7T=N|DVX8cvZTf6?b zKr`$|*#0(j3&)?BUc9cxp=-!XpI!jZd0o(3=U%_wa`__seH!PGm`7Zh>v_m7=;oXp zqmwt{-8E!BBheMP`s!^znJedpzW>9yVH`de{gU%OfBk!xHIG^Y^l|a}cP=B=d`Ap< z0&`!d+-gn0x7O1<*1zsYOLp9Ez+iihw{W~~dQsQx_35K`d0p;cPKhS>F7~PMD*0#0 zv>GiIiwHe->O}0L=VOJ2a6@yfrn%NrY(OD~Xmtn^7NK^x!4_Ig2Z;#~p6BpsC$HC| z`FuXFHz3@8Vs~vcM4lLkfa|ocn!HSsp><1Dn5u$OTqVU-u5(gcL$%yX&~@fmHPx~T zR^c^N`vZ&%ae@sLVS{R&?_&GAM zqE;RU2VF~1CG|B^n+z8ce3EJT2yJ2>z8JzL6_M7^CXPrUPo1=?qn>4}9yy|r*H+cj z)@9XJsd7!jH_UTKC4gW8Ee?1LkOw>qxB&PG;1_^PfOi0Y0`M>|0^S3>0=Ns91K^mU zdcbX4r0R=$s*jP3bO=Ydzk?7G(p*Wn+MK^5e>h9`}c1UUGhArLT zx;A{FYx8=taBWy67ZY%6`7i2NRLo}GL|+)uw~ti9H{vwQMIV@|u&FnII3(V1-v*Ln~B{pS6F zkAffE`*2q(diKOl{jWcL^>cMU=Yr%ySIN7$=wCApA8=yI)j18#{cr0jR)Hvz4OD4OY1Nhey5hGLBs=BM4jhN(eCLNZs58kP`_yM zB!%Ib0&OG(dEOF%z&#OxP$WeFdI3`N82y5-3V*=&xCr$_o)l}6qV1Ge3%gSyW zkGqP1Qhxj7Lgm zT4CN}Y{zxNH~|b7PmjX#h6dlE_^85MmuweS7=1|oZH3P(JgM;03MUkfDhwq3EQP-h zT#dj^dyRPncYZfL3_b+Cvwzr>d8gj_(q!J*AKy|ukZehOS?}!M8pS*N?WE$J{mZ`z zVZPMPR`91Q_>l^p?7L_APB0&Ii +#include +#include + +void print_station(struct station* station){ + // Vypise celu stanicu + printf("station>>>\n"); + // Prechadza vsetky trate + for (int i = 0 ; i< station->track_count; i++){ + struct car* start = station->tracks[i]; + struct car* this = start; + // Prechadza vsetky vozne + while(this != NULL){ + printf("%s %d -> ",this->value,this->capacity); + this=this->next; + } + printf("NULL\n"); + } + printf("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 CPSY*` literal 0 HcmV?d00001