根据要求写出pqueue的工作原理

发布于 2022-03-02 15:50:25

有pqueue.h如下
#ifndef HEADER_PQUEUE_H
#define HEADER_PQUEUE_H
typedef 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<stdlib.h>
#include<string.h>
#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 void
pqueue_print(pqueue pq)
{
     pitem *iter,*item
     iter=pqueue_iterator(pq)
     for(item=pqueue_next(&iter)item!=NULL
         item=pqueue_next(&iter)){
         printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n",
             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\n",item->priority)
     item=pqueue_find(pq,prio2)
     fprintf(stderr,"found %p\n",item->priority)
 
     item=pqueue_find(pq,prio3)
     fprintf(stderr,"found %p\n",item->priority)
     
     pqueue_print(pq)
     for(item=pqueue_pop(pq)item!=NULLitem=pqueue_pop(pq))
     pitem_free(item)
 
     pqueue_free(pq)
     return 0
}
pq_test.sh如下:
#!/bin/sh
set -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)
关注者
0
被浏览
23
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看