Files
lcdproc/old/llistd.h
T
1999-12-09 23:15:14 +00:00

64 lines
2.6 KiB
C

#ifndef LLISTD_H
#define LLISTD_H
/*****************************************************************************
* AUTHOR: Scott Scriven, SSN: 523-21-9640, CLASS: CS151.003, DATE: 96-11-21
******************************************************************************
* Doubly Linked Lists!
* This code will handle "generic" Doubly-Linked Lists. These lists can be
* any type as long as they satisfy a few requirements:
* Your structure must start with two integer pointers:
* struct mystruct {
* int *next, *prev;
* ...
* };
* That's all, pretty much.
*
* Most of the functions take integer pointers. This means you will have to
* call them in one of the following ways:
* function((int *)&mystruct);
* function((int *)mystruct);
* function(&mystruct.next);
*
******************************************************************************
* If I'm not mistaken, this code should work regardless of your machine's
* integer size (16/32/64/etc... bit)
******************************************************************************
* Note that we have to do NULL checking to make sure we don't try to write
* to protected areas of memory if we reach the beginning/end of a list.
*
* We also do some circular-link checking to avoid infinite loops.
* These loops will work fine:
* a <-> b <-> c <-> a <-> b...
* a <-> b <-> c -> c -> c...
* This loop might make this code puke:
* a <-> b <-> c <-> d -> c d <- e <-> f <-> g
*****************************************************************************/
// See llistd.c for detailed descriptions of these functions.
int * LLMakeFirstNode(int * first); // Make a standalone node...
int * LLFindFirst(int * current); // returns address of First node
int * LLFindNext(int * current); // returns address of next node
int * LLFindPrev(int * current); // returns address of prev node
int * LLFindLast(int * current); // returns address of last node
int * LLAddNode(int * current, int * add); // Adds node AFTER current one
int * LLInsertNode(int * current, int * add); // Adds node BEFORE current one
int * LLCutNode(int * cut); // Removes a node from the link
int * LLPush(int * current, int * add); // Add node to end of list
int * LLPop(int * current); // Remove node from end of list
int * LLShift(int * current); // Remove node from start of list
int * LLUnshift(int * current, int * add); // Add node to beginning of list
void LLSwapNodes(int * one, int * two); // Switch two nodes positions...
int LLCountNodes(int * current); // Returns # of nodes in entire list
// "Selection Sort"s the list and returns a pointer to the first node
int * LLSelectSort(int * current, int compare(void *, void *));
#endif