void DLInitList (tDLList *L){
L -> Act = NULL;//prazdny aktualni
L -> First = NULL;//prazdny prvni
L -> Last = NULL;//prazdny posledni}void DLDisposeList (tDLList *L){while(L -> First != NULL){//dokud nezrusim vsechny prvky
tDLElemPtr x = L -> First;//nastav docasny ukazatel na prvni prvek
L -> First = L -> First -> rptr;//nastav prvni prvek na druhy prvekfree(x);//zrus docasny ukazatel (byvaly prvni prvek)}
L -> Act = NULL;//vymaz zbytky
L -> Last = NULL;}void DLInsertFirst (tDLList *L,int val){
tDLElemPtr prvek;//novy prvekif((prvek =malloc(sizeof(struct tDLElem)))== NULL){//jeho alokace
DLError();//a osetreni chybyreturn;}
prvek -> data = val;//nastaveni hodnoty noveho prvku
prvek -> rptr = L -> First;//novy prvni prvek musi ukazovat na ten stary
prvek -> lptr = NULL;//prvek je prvni, takze zarucime ze vlevo nic neniif(L -> First != NULL){
L -> First -> lptr = prvek;//kdyz novy prvek neni do prazdneho seznamu, bude stary prvni prvek ukazovat na aktualni}else{
L -> Last = prvek;//vklafani do rpazdneho seznamu}
L -> First = prvek;//a novy prvni je skutecne prvni}void DLInsertLast(tDLList *L,int val){
tDLElemPtr prvek;//novy prvekif((prvek =malloc(sizeof(struct tDLElem)))== NULL){//jeho alokace
DLError();//a osetreni chybyreturn;}
prvek -> data = val;//nastaveni hodnoty noveho prvku
prvek -> lptr = L -> Last;//novy posledni prvek musi ukazovat na ten stary
prvek -> rptr = NULL;//prvek je posledni, takze zarucime ze vpravo nic neniif(L -> Last != NULL){
L -> Last -> rptr = prvek;//neprazdny seznam}else{
L -> First = prvek;//prazdny seznam}
L -> Last = prvek;//a novy prvni je skutecne posledni}void DLFirst (tDLList *L){
L -> Act = L -> First;//aktalni je prvni}void DLLast (tDLList *L){
L -> Act = L -> Last;//aktualni je posledni}int DLCopyFirst (tDLList *L){if(L -> Last == NULL && L -> First == NULL){//kdyz je prazdny
DLError();//vyvola chybureturn-1;}return L -> First -> data;//precte a vrati prvni hodnotu }int DLCopyLast (tDLList *L){if(L -> Last == NULL && L -> First == NULL){//kdyz je prazdny
DLError();//vyvola chybureturn-1;}return L -> Last -> data;//precte a vrati posledni hodnotu}void DLDeleteFirst (tDLList *L){if(L -> Last == NULL && L -> First == NULL){//kdyz je seznam prazdnyreturn;}if(L -> First != NULL){
tDLElemPtr x = L -> First;//docasny prvekif(L -> Act == L -> First){//kdyz je prvni aktivni
L -> Act = NULL;//deaktivuj ho}if(L -> First == L -> Last){//pokud je mazany posledni
L -> First = NULL;//vynuluj
L -> Last = NULL;}else{//jinak
L -> First = L -> First -> rptr;//dalsi prvni
L -> First -> lptr = NULL;//vlevo nic}free(x);//uvolni}}void DLDeleteLast (tDLList *L){if(L -> Last == NULL && L -> First == NULL){return;//kdyz je seznam prazdny, nedelej nic}
tDLElemPtr x;if(L -> Last != NULL){
x = L -> Last;if(L -> Act == L -> Last){//kdyz je prvni aktivni
L -> Act = NULL;//deaktivuj ho}if(L -> First == L -> Last){//kdyz je seznam skoro prazdny
L -> First = NULL;//vynuluj
L -> Last = NULL;}else{
L -> Last = L -> Last -> lptr;//posledni bude predposledni
L -> Last -> rptr = NULL;//vpravo nic}free(x);//uvolni}}void DLPostDelete (tDLList *L){if(L -> Act != NULL && L -> Act -> rptr != NULL){//kdyz je seznam aktivni a je co mazat (aktivni neni posledni)
tDLElemPtr x = L -> Act -> rptr;//zalohuj mazany
L -> Act -> rptr = x -> rptr;//posun ukazatelif(x == L -> Last){
L -> Last = L -> Act;//kdyz je mazany posledni, bude posledni i aktualni}else{
x -> rptr -> lptr = L -> Act;//kdyz ne, cerna magie}free(x);//uvolni}}void DLPreDelete (tDLList *L){if(L -> Act != NULL && L -> Act -> lptr != NULL){//kdyz je seznam aktivni a je co mazat (aktivni neni prvni)
tDLElemPtr x = L -> Act -> lptr;//zalohuj mazany
L -> Act -> lptr = x -> lptr;//posun ukazatelif(x == L -> First){
L -> First = L -> Act;//kdyz je mazany prvni, bude prvni aktualni}else{
x -> lptr -> rptr = L -> Act;//kdyz ne, cerna magie}free(x);//uvolni}}void DLPostInsert (tDLList *L,int val){if(L -> Act != NULL){// kdyz je seznam aktivni
tDLElemPtr x;//novy prvekif((x =malloc(sizeof(struct tDLElem)))== NULL){//jeho alokace
DLError();//a osetreni chybyreturn;}
x -> data = val;//napln data
x -> rptr = L -> Act -> rptr;
x -> lptr = L -> Act;
L -> Act -> rptr = x;if(L -> Act == L -> Last){
L -> Last = x;// kdyz je aktivni posledni, bude posledni novy}else{
x -> rptr -> lptr = x;//jinak cerna magie}}}void DLPreInsert (tDLList *L,int val){if(L -> Act != NULL){//kdyz je seznam aktivni
tDLElemPtr x;//novy prvekif((x =malloc(sizeof(struct tDLElem)))== NULL){//jeho alokace
DLError();//a osetreni chybyreturn;}
x -> data = val;//napln data
x -> lptr = L -> Act -> lptr;
x -> rptr = L -> Act;
L -> Act -> lptr = x;if(L -> Act == L -> First){
L -> First = x;//kdyz je aktivni prvni, bude prvni novy}else{
x -> lptr -> rptr = x;//jinak cerna magie}}}int DLCopy (tDLList *L){if(L -> Act == NULL){//kdyz neni nic aktivni
DLError();//zarvemereturn-1;//a skoncime}return L -> Act -> data;//precteme aktivni data}void DLActualize (tDLList *L,int val){if(L -> Act == NULL){//nic neni aktivnireturn;//konec}
L -> Act -> data = val;//presuneme aktivitu na nasledujici}void DLSucc (tDLList *L){if(L -> Act == NULL){//nic neni aktivnireturn;//konec}
L -> Act = L -> Act -> rptr;//presuneme aktivitu na nasledujici}void DLPred (tDLList *L){if(L -> Act == NULL){//nic neni aktivnireturn;//konec}
L -> Act = L -> Act -> lptr;//presuneme aktivitu na predchozi}int DLActive (tDLList *L){return L -> Act != NULL;}
/var/www/wiki/data/pages/pitel/ial/ial_du1.txt · Poslední úprava: autor: 127.0.0.1