数据结构之优先级队列

来源:互联网 发布:多益网络充值中心 编辑:程序博客网 时间:2024/06/06 02:26
#include<stdio.h>#define P_QueueSize 100#define  DataType inttypedef struct Priority_QueueType{DataType item[P_QueueSize];int  Priority[P_QueueSize];int rear;}P_QueueType;int Init_P_Queue(P_QueueType *Q);//初始化队列int In_P_Queue(P_QueueType *Q,DataType data,int P_);//入队int Out_P_Priority_Queue(P_QueueType *Q);//出队int Length_P_Queue(P_QueueType *Q);//求队长int Visit_P_Queue(P_QueueType *Q);//遍历队int main(int argc,char *argv[]){P_QueueType Queue,*address;int i,a;system("title 优先级队列测试");address = &Queue;Init_P_Queue(address);for(i=1;i<3;i++) In_P_Queue(address,i,i); for(i=1;i<7;i++) In_P_Queue(address,i+4,i); In_P_Queue(address,10,5); In_P_Queue(address,20,4); In_P_Queue(address,30,8);Visit_P_Queue(address);printf("队长为:%d\n\n",Length_P_Queue(address));printf("出队一个元素:%d\n",Out_P_Priority_Queue(address));    printf("队长为:%d\n",Length_P_Queue(address));return 0;}/******************************//*函数功能:初始化优先级队列  *//*函数参数:Q-指向队列的指针  *//*返回值:插入成功返回1       *//******************************/int Init_P_Queue(P_QueueType *Q){int i,j = P_QueueSize;Q->rear = 0;for(i=0;i<j;i++)//初始化优先级编号Q->Priority[i] = 0;return 1;}/**********************************************//*函数功能:入队                              *//*函数参数:Q-指向队列的指针 ,item- 入队元素 P_优先级 *//*返回值:入队成功返回1                       *//**********************************************/int In_P_Queue(P_QueueType *Q,DataType data,int P_){int i = P_QueueSize,j,m;if(Q->rear == i){printf("\n\a队列已满!");return 0;}if(P_ <= 0){printf("\n\a最高优先级为1!");return 0;}for(j=Q->rear-1;j>=0;j--){if(Q->Priority[j] <= P_) //判读是否直接追加在队尾{Q->item[Q->rear] = data;Q->Priority[Q->rear] = P_;Q->rear ++;return 0;}if( Q->Priority[j]>P_ && Q->Priority[j-1] <= P_) //判读插入位置{for(m=Q->rear;m>j;m--){Q->item[m] = Q->item[m-1];Q->Priority[m] = Q->Priority[m-1];}Q->item[j] = data;Q->Priority[j] = P_;Q->rear ++;return 1;}}if(Q->rear == 0)//队列中优先级没有高于插入数据优先级数据,执行插入 {for(m=Q->rear;m>0;m--){Q->item[m] = Q->item[m-1];Q->Priority[m] = Q->Priority[m-1];}Q->item[0] = data;Q->Priority[0] = P_;Q->rear ++;return 1;}printf("\n\a未知错误!");return 0;}/*******************************//*函数功能:出队               *//*函数参数:Q-指向队列的指针   *//*返回值:返回出队元素         *//*******************************/int Out_P_Priority_Queue(P_QueueType *Q){int i;DataType a;if(Q->rear == 0){printf("\n\a队列已空!");return 0;}a = Q->item[0];for(i=0;i<Q->rear;i++)Q->item[i] = Q->item[i+1];Q->rear --;return a;}/******************************//*函数功能:求队列长度        *//*函数参数:Q-指向队列的指针  *//*返回值:返回出队长          *//******************************/int Length_P_Queue(P_QueueType *Q){return  Q->rear;}/*******************************//*函数功能:遍历队             *//*函数参数:Q-指向队列的指针   *//*返回值:返回出队长           *//*******************************/int Visit_P_Queue(P_QueueType *Q){int i;if(Q->rear == 0){printf("\n\a队列空!");return 0;}printf("\n队列数据\t优先级\n");for(i=0;i<Q->rear;i++){printf("%d\t\t",Q->item[i]);printf("%d  \n",Q->Priority[i]);}return 1;}

0 0