dllist.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * dllist.h
  4.  * simple doubly linked list primitives
  5.  * the elements of the list are void* so the lists can contain
  6.  * anything
  7.  * Dlelem can only be in one list at a time
  8.  *
  9.  *
  10.  *  Here's a small example of how to use Dllist's :
  11.  *
  12.  *  Dllist *lst;
  13.  *  Dlelem *elt;
  14.  *  void *in_stuff;   -- stuff to stick in the list
  15.  *  void *out_stuff
  16.  *
  17.  *  lst = DLNewList();    -- make a new dllist
  18.  *  DLAddHead(lst, DLNewElem(in_stuff)); -- add a new element to the list
  19.  *  with in_stuff as the value
  20.  *   ...
  21.  *  elt = DLGetHead(lst);    -- retrieve the head element
  22.  *  out_stuff = (void*)DLE_VAL(elt);  -- get the stuff out
  23.  *  DLRemove(elt);    -- removes the element from its list
  24.  *  DLFreeElem(elt);    -- free the element since we don't
  25.  *   use it anymore
  26.  *
  27.  * Copyright (c) 1994, Regents of the University of California
  28.  *
  29.  * $Id: dllist.h,v 1.10 1999/05/31 23:48:03 tgl Exp $
  30.  *
  31.  *-------------------------------------------------------------------------
  32.  */
  33. #ifndef DLLIST_H
  34. #define DLLIST_H
  35. struct Dllist;
  36. struct Dlelem;
  37. typedef struct Dlelem
  38. {
  39. struct Dlelem *dle_next; /* next element */
  40. struct Dlelem *dle_prev; /* previous element */
  41. void    *dle_val; /* value of the element */
  42. struct Dllist *dle_list; /* what list this element is in */
  43. } Dlelem;
  44. typedef struct Dllist
  45. {
  46. Dlelem    *dll_head;
  47. Dlelem    *dll_tail;
  48. } Dllist;
  49. extern Dllist *DLNewList(void); /* initialize a new list */
  50. extern void DLFreeList(Dllist *); /* free up a list and all the
  51.  * nodes in it */
  52. extern Dlelem *DLNewElem(void *val);
  53. extern void DLFreeElem(Dlelem *);
  54. extern Dlelem *DLGetHead(Dllist *);
  55. extern Dlelem *DLGetTail(Dllist *);
  56. extern Dlelem *DLRemTail(Dllist *l);
  57. extern Dlelem *DLGetPred(Dlelem *); /* get predecessor */
  58. extern Dlelem *DLGetSucc(Dlelem *); /* get successor */
  59. extern void DLRemove(Dlelem *); /* removes node from list */
  60. extern void DLAddHead(Dllist *list, Dlelem *node);
  61. extern void DLAddTail(Dllist *list, Dlelem *node);
  62. extern Dlelem *DLRemHead(Dllist *list); /* remove and return the head */
  63. extern void DLMoveToFront(Dlelem *); /* move node to front of its list */
  64. #define DLE_VAL(x) (x->dle_val)
  65. #endif  /* DLLIST_H */