优先级队列实现操作包括
//声明优先级队列数据结构
/*初始化优先级队列*/
void QueueInitiate(seqPQueue* Q);
/*优先级队列是否为空*/
//若为空返回0,否则返回1
int QueueNotEmpty(seqPQueue Q);
/*优先级队列入队列*/
//成功返回1,否则返回0
int QueueAppend(seqPQueue* Q, DataType x);
/*删除优先级队列中优先级最高的元素*/
//成功返回1,否则返回0
int QueueDelete(seqPQueue* Q, DataType* x);
/*取优先级队列优先级最高元素*/
//成功返回1,否则返回0
int QueueGet(seqPQueue* Q, DataType* x);
1.结构体定义
//定义队列元素结构体
typedef int ElemType;
typedef struct
{
int priority; //定义队列元素优先级
ElemType elem; //其他内容
}DataType;
//定义队列结构
typedef struct
{
DataType Queue[MaxSize];
int size;
}seqPQueue;
2.初始化优先级队列
/*初始化优先级队列*/
void QueueInitiate(seqPQueue* Q)
{
Q->size = 0;
}
3.优先级队列是否为空
/*优先级队列是否为空*/
//若为空返回0,否则返回1
int QueueNotEmpty(seqPQueue Q)
{
if (Q.size > 0)
return 1;
else
return 0;
}
4.优先级队列入队列
/*优先级队列入队列*/
//成功返回1,否则返回0
int QueueAppend(seqPQueue* Q, DataType x)
{
if (Q->size >= MaxSize)
{
printf("队列已满无法插入");
return 0;
}
else
{
Q->Queue[Q->size] = x;
Q->size++;
return 1;
}
}
5.删除优先级队列中优先级最高的元素
/*删除优先级队列中优先级最高的元素*/
//成功返回1,否则返回0
int QueueDelete(seqPQueue* Q, DataType* x)
{
if (Q->size <= 0)
{
printf("队列已空无法删除");
return 0;
}
else
{
/*数值越小优先级越高*/
DataType min; //定义一个变量来接受优先级最高的元素
int minindex, i; //minindex用来存优先级最高的元素的下标
min = Q->Queue[0]; //先假设第一个元素优先级最高
minindex = 0; //记下当前优先级最高的元素下标
for (i = 1; i < Q->size; i++) //找优先级高的元素先删除
{
if (Q->Queue[i].priority < min.priority)
{
min = Q->Queue[i];
minindex = i;
}
}
*x = Q->Queue[minindex]; //将删除的优先级最高的元素由x带回
for (i = minindex + 1; i < Q->size - 1; i++)
{
Q->Queue[i - 1] = Q->Queue[i]; //依次前移
}
Q->size--;
return 1;
}
}
6.取优先级队列优先级最高元素
/*取优先级队列优先级最高元素*/
//成功返回1,否则返回0
int QueueGet(seqPQueue* Q, DataType* x)
{
if (Q->size <= 0)
{
printf("队列已空无法取元素");
return 0;
}
else
{
/*数值越小优先级越高*/
DataType min; //定义一个变量来接受优先级最高的元素
int minindex, i; //minindex用来存优先级最高的元素的下标
min = Q->Queue[0]; //先假设第一个元素优先级最高
minindex = 0; //记下当前优先级最高的元素下标
for (i = 1; i < Q->size; i++) //找优先级高的元素
{
if (Q->Queue[i].priority < min.priority)
{
min = Q->Queue[i];
minindex = i;
}
}
*x = Q->Queue[minindex]; //将的优先级最高的元素由x带回
return 1;
}
}
程序测试如下
#include<stdio.h>
#include"seqpqueue.h"
int main()
{
seqPQueue Queue;
int i,a;
DataType x;
QueueInitiate(&Queue);
for ( i = 0; i<MaxSize; i++)
{
x.priority = MaxSize - i;
QueueAppend(&Queue,x);
}
for (i = 0; i < MaxSize; i++)
printf("%d ", Queue.Queue[i]);
printf("\n");
QueueGet(&Queue, &a);
printf("当前优先级最高的元素为%d\n", a);
while (QueueNotEmpty(Queue))
{
QueueDelete(&Queue, &a);
printf("%d ", a);
}
}
程序运行结果如下