赞
踩
优先级队列实现操作包括
- //声明优先级队列数据结构
-
- /*初始化优先级队列*/
- 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);
- }
- }
程序运行结果如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。