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 9Routines to manipulate queues built from doubly linked lists. The 10@code{insque} routine inserts @var{elem} in the queue immediately 11after @var{pred}. The @code{remque} routine removes @var{elem} from 12its containing queue. These routines expect to be passed pointers to 13structures which have as their first members a forward pointer and a 14back pointer, like this prototype (although no prototype is provided): 15 16@example 17struct 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 29struct qelem { 30 struct qelem *q_forw; 31 struct qelem *q_back; 32}; 33 34 35void 36insque (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 45void 46remque (struct qelem *elem) 47{ 48 elem -> q_forw -> q_back = elem -> q_back; 49 elem -> q_back -> q_forw = elem -> q_forw; 50} 51