经典笔试题:优先级队列代码实现

  优先级队列

           优先级队列是带有优先级的队列,普通的队列是从队尾进数据,从队头出数据,而优先级队列入数据一样,不过出数据的时候是根据数据的优先级从高到低进行出数据,这种数据类型适用于一些文件管理的软件,优先级队列的使用也会加快工作效率,相比于一般队列,优先级队列也不会出现假溢出的问题。
下面是实现代码
typedef struct
{
	int priority;  //优先级
	ElemType elem; //其他内容
}DataType;

typedef struct
{
	DataType queue[Maxsize]; //队列数组
	int size;                 //元素个数
}SeqPQueue;                  //优先级队列结构体


void QueueInitiate(SeqPQueue *Q)
{
	Q->size=0;    //定义初始元素个数
}

int QueueNotEmpty(SeqPQueue Q)//判断优先级队列是否非空
{
	if(Q.size <=0)
		return 0;
	else
		return 1;
}

int QueueAppend(SeqPQueue *Q,DataType x)
{
	if(Q->size >=Maxsize)
	{
		printf("队列已满无法插入");
		return 0;
	}
	else         //把数据元素值x插入队列的队尾,成功返回1,失败返回0
	{
		Q->queue[Q->size]=x;
		Q->size++;
		return 1;
	}
}

int QueueDelete(SeqPQueue *Q,DataType *d)
{  //删除队列中优先级最高的元素并且赋给d,成功返回1,失败返回0
	DataType min;
	int minIndex,i;

	if(Q->size<0)
	{
		printf("队列已空无法出数据");
		return 0;
	}
	else
	{
		min=Q->queue[0];   //初始选queue[0]为优先级最高的元素
		minIndex=0;        //minIndex为优先级最高的元素下标
		for(i=1;i<Q->size;i++)  //寻找优先级最高元素对应下标
			if(Q->queue[i].priority<min.priority)//选择比较法找出最大优先级的元素
			{
				min=Q->queue[i];
				minIndex=i;
				*d=Q->queue[minIndex];  //找到的优先级最高的元素
				for(i=minIndex;i<Q->size;i++)//数据元素依次前移
					Q->queue[i-1]=Q->queue[i];
				Q->size--;                //元素个数减1
				return 1;
			}
	}
	int QueueGet(SeqPQueue *Q,DataType *d)
//取优先级最高的元素并且赋值给d,成功则返回1,失败则返回0
	{
		DataType min;
		int minIndex,i;

		if(Q->size<=0)
		{
			printf("队列已空无数据可取");
			return 0;
		}
		else
		{
			min=Q->queue[0];   //初始选queue[0]为优先级最高的元素
			minIndex=0;        //minIndex为优先级最高的元素的下标
			for(i=1;i<Q->size;i++)//寻找优先级最高的元素对应的下标
			{
				if(Q->queue[i].priority<min.priority)
				{
					min=Q->queue[i];
					minIndex=i;
				}
				*d=Q->queue[minIndex]; //找到的优先级最高的元素
				return 1;
			}

		}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值