【正确答案】(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);
}
【答案解析】