| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | LISTLINK.C 2/5 |
/*_|_| LISTLINK.C ( part 2 of 5 )
_|_|_| Heavily commented example of using linked lists in C.
_|_|_| No warrantee or guarantee is given or implied.
_|_|_| PUBLIC DOMAIN by Kurt Kuzba. (7/3/1998)*/
void Dec_It(LinkedList *LL)
{ /* Decrement the list iterator. */
ListData *LD = LL->item; /* Set up a ListData pointer. */
if(LD->iterator > 1) /* Test for first list element. */
{
LD->it = LD->it->prev; /* Set iterator to prev element. */
LD->iterator--; /* Update iterator numerator. */
}
else
{
if(LD->items)
{
LD->it = LL->prev; /* Wrap to first list element. */
LD->iterator = LD->items;
} /* Update iterator numerator. */
}
}
int Set_It(LinkedList *LL, int i)
{ /* Set the iterator element. */
ListData *LD = LL->item; /* Set up a ListData pointer. */
if(i items && i > 0) /* Check bounds, set iterator. */
LD->it = List_Walk(LL, LD->iterator = i);
return LD->iterator; /* Return iterator numerator. */
}
void *Get_It(LinkedList *LL)
{ /* Get the iterator item. */
ListData *LD = LL->item; /* Set up a ListData pointer. */
return LD->it->item; /* Return the iterator item. */
}
LinkedList *Know_It(LinkedList *LL)
{ /* Get the iterator element. */
ListData *LD = LL->item; /* Set up a ListData pointer. */
return LD->it; /* Return the iterator element. */
}
void Swap_List(LinkedList *LL, int a, int b)
{
void *it; /* Set up a temp item pointer. */
LinkedList *at, *bt; /* Set up temp list pointers. */
ListData *LD = LL->item; /* Set up a ListData pointer. */
if(a > 0 && a items && b > 0
&& b items)
{ /* Perform bounds check on a & b.*/
at = List_Walk(LL, a); /* Get the pointer to element a. */
bt = List_Walk(LL, b); /* Get the pointer to element b. */
it = at->item; /* Get the item pointer from a. */
at->item = bt->item; /* Redefine item pointer for a. */
bt->item = it; /* Redefine item pointer for b. */
}
}
void Del_iList(LinkedList *LL, int i)
{ /* Remove a known list element. */
LinkedList *item = List_Walk(LL, i), *nxt, *prv;
ListData *LD = LL->item; /* Set up a ListData pointer. */
if(item) /* Test for valid list element. */
{
nxt = item->next; /* Get next list element. */
prv = item->prev; /* Get prev list element. */
free(item->item); /* Free list item. */
free(item); /* Free list element. */
if(nxt && prv) /* Test for mid-list element. */
{
nxt->prev = prv; /* Link next element to prev. */
prv->next = nxt; /* Link prev element to next. */
}
if(nxt && !prv) /* Test for first list element. */
{
LL->next = nxt; /* Link next as first element. */
nxt->prev = NULL; /* Set prev link to NULL. */
}
if(prv && ! nxt) /* Test for last list element. */
{
LL->prev = prv; /* Link prev as first element. */
prv->next = NULL; /* Set next link to NULL. */
}
if(!prv && !nxt) /* Test for only list element. */
LL->prev = LL->next = NULL;
LD->items--; /* Update list items counter. */
LD->iterator = (LD->iterator > LD->items)
? LD->items /* Update iterator numerator. */
: LD->iterator;
Set_It(LL, LD->iterator);/* Update list iterator. */
}
}
/*_|_| end LISTLINK.C ( part 2 of 5 ) */
> ] * Origin: *YOPS ]I[* 8.4 GIG * RA/FD/FE * Milwaukee, WI (1:154/750)SEEN-BY: 396/1 622/419 632/371 633/260 267 270 371 634/397 635/506 728 SEEN-BY: 639/252 670/213 218 @PATH: 154/750 222 396/1 633/260 635/506 728 633/267 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.