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

  优先级队列

           优先级队列是带有优先级的队列,普通的队列是从队尾进数据,从队头出数据,而优先级队列入数据一样,不过出数据的时候是根据数据的优先级从高到低进行出数据,这种数据类型适用于一些文件管理的软件,优先级队列的使用也会加快工作效率,相比于一般队列,优先级队列也不会出现假溢出的问题。
下面是实现代码
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;isize;i++)  //寻找优先级最高元素对应下标
			if(Q->queue[i].priorityqueue[i];
				minIndex=i;
				*d=Q->queue[minIndex];  //找到的优先级最高的元素
				for(i=minIndex;isize;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;isize;i++)//寻找优先级最高的元素对应的下标
			{
				if(Q->queue[i].priorityqueue[i];
					minIndex=i;
				}
				*d=Q->queue[minIndex]; //找到的优先级最高的元素
				return 1;
			}

		}




你可能感兴趣的:(数据结构,C语言的小分享,原创,成长)