insque.c revision 89857
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 (elem, pred) 37 struct qelem *elem; 38 struct qelem *pred; 39{ 40 elem -> q_forw = pred -> q_forw; 41 pred -> q_forw -> q_back = elem; 42 elem -> q_back = pred; 43 pred -> q_forw = elem; 44} 45 46 47void 48remque (elem) 49 struct qelem *elem; 50{ 51 elem -> q_forw -> q_back = elem -> q_back; 52 elem -> q_back -> q_forw = elem -> q_forw; 53} 54