#include <cstring>

#define error -1

struct ZaposlenaOsoba {
    char OIB[12];
    char prezime[35], ime[35];
    char datum[12], rad_mj[40]; };

struct lis {
    ZaposlenaOsoba polje[10000];
    int cursor; };

typedef int element;

typedef lis *lista;



element FirstL(lista L) {
    return 0; }

element EndL(lista L) {
    return L->cursor; }

element NextL(element p, lista L) {
    if(p == EndL(L)) {
        return error; }
    else {
        return p+1; } }

element PreviousL(element p, lista L) {
    if(p == FirstL(L)) {
        return error; }
    else {
        return p-1; } }

element LocateL(ZaposlenaOsoba x, lista L) {
    for(int i=FirstL(L); i!=L->cursor; i++) {
        if(strcmp(L->polje[i].OIB, x.OIB) == 0 &&
                strcmp(L->polje[i].prezime, x.prezime) == 0 &&
                strcmp(L->polje[i].ime, x.ime) == 0 &&
                strcmp(L->polje[i].datum, x.datum) == 0 &&
                strcmp(L->polje[i].rad_mj, x.rad_mj) == 0) {
            return i; } }

    return EndL(L); }

bool InsertL(ZaposlenaOsoba x, element p, lista L) {
    if(p<0 || p>=10000) {
        return 0; }

    for(int i=EndL(L); i>p; i--) {
        L->polje[i] = L->polje[i-1]; }
    L->cursor = L->cursor+1;

    L->polje[p] = x;

    return 1; }

bool DeleteL(element p, lista L) {
    if(p<0 || p>=10000) {
        return 0; }

    L->cursor = L->cursor-1;
    for(int i=p; i<L->cursor; i++) {
        L->polje[i] = L->polje[i+1]; }

    return 1; }

ZaposlenaOsoba RetreiveL(element p, lista L) {
    return L->polje[p]; }

void DeleteAllL(lista L) {
    L->cursor = 0; }

lista InitL(lista L) {
    L = new lis;
    L->cursor = 0;
    return L; }