queue.h
queue.c
优先队列测试.c
queue.h
#include <stdio.h>
#include <stdlib.h>
#define datatype int
typedef struct queue{
datatype data;
int high;//优先级
struct queue *pNext;
}Queue, *PQueue;
void init(PQueue *phead);//初始化
PQueue enq(PQueue phead, datatype data,int high);//入队
PQueue deq(PQueue phead, PQueue pdata);//出队
void show(PQueue phead);//显示队列
queue.c
#include "queue.h"
void init(PQueue *pphead)//初始化
{
*pphead = NULL;
}
PQueue enq(PQueue phead, datatype data,int high)//入队
{
PQueue pnew = malloc(sizeof(Queue));//开辟数据
pnew->high = high;
pnew->data = data;
pnew->pNext = NULL;//开辟新节点
if (phead == NULL)
{
phead = pnew;//直接插入
return phead;
}
else{
if (pnew->high > phead->high)
{
pnew->pNext = phead;
phead = pnew;//头部插入
return phead;
}
else
{
PQueue ptemp = phead;
while (ptemp->pNext != NULL){
ptemp = ptemp->pNext;//循环到尾部
}
if (pnew->high < ptemp->high){
ptemp->pNext = pnew;
return phead;//尾部插入
}
else{
PQueue p1, p2;
p1 = p2 = NULL;
p1 = phead;
while (p1->pNext != NULL){
p2 = p1->pNext;//下一个节点
if ((pnew->high <= p1->high) && (pnew->high >p2->high)){
pnew->pNext = p1->pNext;
p1->pNext = pnew;//插入
break;
}
p1 = p1->pNext;
}
return phead;
}
}
}
}
PQueue deq(PQueue phead, PQueue pdata)//出队
{
if (phead == NULL)
{
return NULL;
}
else{
pdata->high = phead->high;
pdata->data = phead->data;//保存出队的值
PQueue ptemp = phead;
phead = phead->pNext;//存储下一个节点
free(ptemp);
return phead;
}
}
void show(PQueue phead)//显示队列
{
if (phead == NULL)
{
return;
}
else{
printf("\n%d,%d,%p,%p", phead->data,phead->high,phead,phead->pNext);
show(phead->pNext);//递归调用
}
}
优先队列测试.c
#include "queue.h"
void main()
{
PQueue phead;
init(&phead);
phead = enq(phead, 100, 4);
phead = enq(phead, 100, 2);
phead = enq(phead, 100, 1);
phead = enq(phead, 100, 3);
phead = enq(phead, 100, 5);
phead = enq(phead, 101, 5);
phead = enq(phead, 102, 5);
printf("\n此时状态");
show(phead);
while (phead != NULL)
{
Queue qu;
phead = deq(phead, &qu);
printf("\nfree %d,%d",qu.high,qu.data);
printf("\n此时状态");
show(phead);
}
system("pause");
}