有pqueue.h如下 #ifndef HEADER_PQUEUE_H#define HEADER_PQUEUE_Htypedef struct_pqueue{ pitem *items; int count;}pqueue_s;typedef struct_pqueue *pqueue;typedef struct_pitem{ unsigned char priority[8]; void *data; struct_pitem *next;}pitem;typedef struct_pitem *piterator;pitem *pitem_new(unsigned char *prio64be,void *data);void pitem_free(pitem *item); pqueue pqueue_new(void);void pqueue_free(pqueue pq);pitem *pqueue_insert(pqueue pq,pitem *item);pitem *pqueue_peek(pqueue pq);pitem *pqueue_pop(pqueue pq);pitem *pqueue_find(pqueue pq,unsigned char *prio64be);pitem *pqueue_iterator(pqueue pq);pitem *pqueue_next(piterator *iter);int pqueue_size(pqueue pq);#endif /*! HEADER_PQUEUE_H */ pq_test.c如下: #include#include#include"pqueue.h"/*remember to change expected.txt if you change there values*/unsigned char prio1[8]="supercal";unsigned char prio2[8]="ifragili";unsigned char prio3[8]="sticexpi";static voidpqueue_print(pqueue pq){ pitem *iter,*item; iter=pqueue_iterator(pq); for(item=pqueue_next(&iter);item!=NULL; item=pqueue_next(&iter)){ printf("item%02x%02x%02x%02x%02x%02x%02x%02x
", item ->priority[0],item->priority[1], item ->priority[2],item->priority[3], item ->priority[4],item->priority[5], item ->priority[6],item->priority[7], }}int main(void){ pitem *item; pqueue pq; pq=pqueue_new(); item=pitem_new(prio3,NULL); pqueue_insert(pq,item); item=pitem_new(prio1,NULL); pqueue_insert(pq,item); item=pitem_new(prio2,NULL); pqueue_insert(pq,item); item=pqueue_find(pq,prio1); fprintf(stderr,"found %p
",item->priority); item=pqueue_find(pq,prio2); fprintf(stderr,"found %p
",item->priority); item=pqueue_find(pq,prio3); fprintf(stderr,"found %p
",item->priority); pqueue_print(pq); for(item=pqueue_pop(pq);item!=NULL;item=pqueue_pop(pq)) pitem_free(item); pqueue_free(pq); return 0;} pq_test.sh如下: #!/bin/shset -e./pq_test | cmp $srcdir/pq_expected.txt- pq_expected.txt如下: item 6966726167696c69 item 7374696365787069 item 737570657263616c 1.根据测试代码描述pqueue的工作原理。 2.请实现 pitem *pqueue_insert(pqueue pq,pitem *item);