1 /* insque(3C) routines 2 This file is in the public domain. */ 3 4 /* 5 6 @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) 7 @deftypefnx Supplemental void remque (struct qelem *@var{elem}) 8 9 Routines to manipulate queues built from doubly linked lists. The 10 @code{insque} routine inserts @var{elem} in the queue immediately 11 after @var{pred}. The @code{remque} routine removes @var{elem} from 12 its containing queue. These routines expect to be passed pointers to 13 structures which have as their first members a forward pointer and a 14 back pointer, like this prototype (although no prototype is provided): 15 16 @example 17 struct qelem @{ 18 struct qelem *q_forw; 19 struct qelem *q_back; 20 char q_data[]; 21 @}; 22 @end example 23 24 @end deftypefn 25 26 */ 27 28 29 struct qelem { 30 struct qelem *q_forw; 31 struct qelem *q_back; 32 }; 33 34 35 void 36 insque (struct qelem *elem, struct qelem *pred) 37 { 38 elem -> q_forw = pred -> q_forw; 39 pred -> q_forw -> q_back = elem; 40 elem -> q_back = pred; 41 pred -> q_forw = elem; 42 } 43 44 45 void 46 remque (struct qelem *elem) 47 { 48 elem -> q_forw -> q_back = elem -> q_back; 49 elem -> q_back -> q_forw = elem -> q_forw; 50 } 51