结构推理 给出用有序链表表示的优先队列和基本操作的实现算法。
【正确答案】(1)数据结构
   typedef int DataType;
   structNode;    /*单链表结点类型*/
   typedef structNode*PNode;    /*结点指针类型*/
   struct Node    /*单链表结点结构*/
   {
       DataType info;
       PNode link;
   };
   typedef struct Node*LinkList;
   typedef LinkList ListPriorityQueue;
   typedef LinkList*PListPriorityQueue;
   (2)思路
   假设优先队列中结点的info字段代表结点的优先级,存储结构与带头结点的单列表相同,创建空优先队列等算法与带头结点的单列表算法类似,区别主要在于有序性。为此只要在插入结点时,按其优先级在队列中的找到合适的位置然后插入即可。
   (3)算法
   /*创建优先队列*/
   ListPriorityQueue createNullList(void){
       ListPriorityQueue alpq=(PNode)malloc(sizeof(struct Node));
       if(alpq!=NULL)
           alpq->link=NULL;
       else{
           printf("out of space!/n");
           return NULL;
       }
       return alpq;
   }
   /*判断是否为空*/
   int isEmpty_List(ListPriorityQueue p){
       return isNullList_link(p);
   }
   /*插入元素*/
   void add_List(ListPriorityQueue queue,DataType x){
       PNode p=queue,q;
       while(p->link!=NULL&&p->link->info<x)
       p=p->link;
       q=(PNode)malloc(sizeof(struct Node));
       q->info=x:q->link=p->link;
       p->link=q;
   }
   /*取最小元素*/
   DataType min_List(ListPriorityQueue p){
       return p->link->info;
   }
   /*删除最小元素*/
   void removeMin_List(ListPriorityQueue p){
       PNode q;
       q=p->link;
       p->link=p->link->link;
       free(q);
   }
【答案解析】