void InitList (tList *L) { L -> act = NULL; //prazdny aktualni L -> frst = NULL; //prazdny konec } void DisposeList (tList *L) { while (L -> frst != NULL) { //dokud nezrusim vsechny prvky tElemPtr x = L -> frst; //nastav docasny ukazatel na prvni prvek L -> frst = L -> frst -> ptr; //nastav prvni prvek na druhy prvek free(x); //zrus docasny ukazatel (byvaly prvni prvek) } L -> act = NULL; } void InsertFirst (tList *L, int val) { tElemPtr prvek; //novy prvek if ((prvek = malloc(sizeof(struct tElem))) == NULL ) { //jeho alokace Error(); //a osetreni chyby return; } prvek -> data = val; //nastaveni hodnoty noveho prvku prvek -> ptr = L -> frst; //novy prvni prvek musi ukazovat na ten stary L -> frst = prvek; //a novy prvni je skutecne prvni } void First (tList *L) { L -> act = L -> frst; //aktualni ukazuje na prvni } void CopyFirst (tList *L, int *val) { if (L -> frst == NULL) { //kdyz je prazdny Error(); //vyvola chybu return; } *val = L -> frst -> data; //precte a vrati hodnotu } void DeleteFirst (tList *L) { if (L -> frst == NULL) { //kdyz je prazdny return; //nic nedelej } if (L -> act == L -> frst) { //kdyz je prvni aktivni L -> act = NULL; //deaktivuj ho } tElemPtr x = L -> frst; //zalozni ukazatlen na prvni L -> frst = L -> frst -> ptr; //prvni bude ted druhy free(x); //zrus stary prvni } void PostDelete (tList *L) { if (L -> act == NULL || L -> act -> ptr == NULL) { //neni aktivni nebo je posledni prvek return; //nic nedelej } tElemPtr x = L -> act -> ptr; //docasny ukazatel na nasledujici prvek L -> act -> ptr = L -> act -> ptr -> ptr; //ukazatel na nasledujici musi ukazovat na ten jeste dalsi nasledujici free(x); //zrusit stary nasledujici } void PostInsert (tList *L, int val) { if (L -> act == NULL) { //neni aktivni return; //nedlej nic } tElemPtr prvek; //novy prvek if ((prvek = malloc(sizeof(struct tElem))) == NULL ) { //zkusime naalokovat Error(); //nebo skoncime return; } prvek -> data = val; //naplnime hodnotu prvek -> ptr = L -> act -> ptr; //ukazeme na nasledujici prvek L -> act -> ptr = prvek; //a novy nasledujici bude nas novy prvek } void Copy (tList *L, int *val) { if (L -> act == NULL) { //kdyz neni nic aktivni Error(); //zarveme return; //a skoncime } *val = L -> act -> data; //precteme aktivni data } void Actualize (tList *L, int val) { if (L -> act == NULL) { //kdyz neni aktivni return; //konec } L -> act -> data = val; //zapise nova data do aktivniho prvku } void Succ (tList *L) { if (L -> act == NULL) { //nic neni aktivni return; //konec } L -> act = L -> act -> ptr; //presuneme aktivitu na nasledujici } int Active (tList *L) { /* if (L -> act == NULL) { return 0; } else { return 1; } */ return L -> act != NULL; }