C语言 优先级队列的实现
首先定义队列结构体
//定义队列元素结构体
typedef struct
{
int priority;
int elem;
}DataType;
//定义队列结构
typedef struct
{
DataType Queue[MaxSize];
int size;
}seqpQueue;
声明优先级队列的初始化、判空、增、删、查函数
```c
/*初始化优先级队列*/
void queue_initiate(seqpQueue* Q);
/*优先级队列是否为空*/
int queue_empty(seqpQueue* Q);
/*优先级队列入队*/
int queue_push(seqpQueue* Q,DataType x);
/*删除优先级队列中优先级最高的元素*/
int queue_delete(seqpQueue* Q,DataType* x);
/*取优先级队列优先级最高的元素*/
int queue_get(seqpQueue* Q,DataType* x);
完成上面这些函数
void queue_initiate(seqpQueue* Q)
{
Q->size = 0;
}
int queue_empty(seqpQueue* Q)
{
if(Q->size > 0)
return 1;
else
return 0;
}
int queue_push(seqpQueue* Q,DataType x)
{
if(Q->size >= MaxSize)
{
printf("队列已满无法插入");
return 0;
}
else
{
Q->Queue[Q->size] = x;
Q->size++;
return 1;
}
}
int queue_delete(seqpQueue* Q,DataType* x)
{
if(Q->size <= 0)
{
printf("队列已空无法删除");
return 0;
}
else
{
/*数值越小优先级越高*/
DataType min;
int minindex,i;
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];
for(i=minindex + 1;i<Q->size - 1;i++)
{
Q->Queue[i-1]=Q->Queue[i];
}
Q->size--;
return 1;
}
}
int queue_get(seqpQueue* Q,DataType* x)
{
if(Q->size <= 0)
{
printf("队列已空无法取元素");
return 0;
}
else
{
DataType max;
int maxindex,i;
max = Q->Queue[0];
maxindex = 0;
for(i=1;i<Q->size;i++)
{
if(Q->Queue[i].priority > max.priority)
{
max = Q->Queue[i];
maxindex = i;
}
}
*x = Q->Queue[maxindex];
return 1;
}
}
主函数
int main()
{
seqpQueue Q;
int i;
DataType x,a;
queue_initiate(&Q);
for ( i = 0; i < MaxSize; i++)
{
x.priority = MaxSize - i;
x.elem = i + 1;
queue_push(&Q,x);
}
for (i = 0; i < MaxSize; i++)
printf("%d ", Q.Queue[i].elem);
printf("\n");
queue_get(&Q, &a);
printf("当前优先级最高的元素为%d\n", a.elem);
while (queue_empty(&Q))
{
queue_delete(&Q, &a);
printf("%d ", a.elem);
}
printf("\n");
return 0;
}
运算结果: