// Algoritmus vloženia nového prvku do poľa
// Pole array musi byt alokovane aspon na velkost size + 1
void insert(int array*, int size, int value, int index){
// Aká je zložitosť?
for (int i = size ; i > index; i--){
array[i] = array[i-1];
}
assert(index <= size);
array[index] = value;
}
[quote, Introduction to Algorithms]
Údajová štuktúra je spôsob ako uložiť a zoradiť dáta tak aby sme ich vedeli čítať a meniť.
A data structure is a way to store and organize data in order to facilitate access and modifications.
Všade, kde sa pracuje s údajmi...
Údajová štruktúra je tvorená algoritmami abstraktných operácií s množinou údajov.
SEARCH(S,x):: Vráti smerník na prvok x alebo NULL ak sa prvok nenachádza v množine S
Miesto pre dočasné uloženie viacerých údajov.
FIFO:: First in, first out
LIFO:: Last in, first out.
typ FIFO
Operácie so zložitosťou O(1):
video::HwoMDBM4Mq4
typ LIFO
Operácie so zložitosťou O(1):
video::umNoxIN45hY
struct stack {
int size;
int capacity;
char* array;
};
struct pole* create_char_array(int size){
struct pole* res = malloc(sizeof(struct char_array));
res->size = size;
res->array = malloc(size * sizeof(char));
return res;
}
void destroy_stack(struct stack* stack){
free(stack->array);
free(stack);
}
Využijeme fakt, že pridanie prvku na koniec poľa je jednoduché
void push_stack(struct stack* stack, char value){
if(size == stack->capacity - 1 ){
stack->capacity = stack->capacity * 2;
stack->array = realloc(stack->array,stack->capacity);
}
stack->array = value;
stack->size += 1;
}
Musíme skontrolovať či je dosť miesta.
Ak chceme, môžeme alokovať pole na menšie aby sa ušetrilo miesto.
Niekedy to nemá zmysel.
int pop_stack(struct stack* stack){
if (stack->size == 0){
return -1;
}
char val = stack->array[stack->size];
stack->size = stack->size - 1;
return val;
}