顺序优先级队列
2012-05-13 11:11
323 查看
初学数据结构,一个小程序
SeqPQueue.h
SeqPQueue.h
typedef struct DataType { ElemType elem; //数据元素 int priority; //优先级 (数值越小,优先级越高) }DataType; typedef struct SeqPQueue { DataType data[maxSize]; //顺序队列数组 int front; //队头指示器 int rear; //队尾指示器 (可作为元素个数计数器) }SeqPQueue; /*初始化*/ SeqPQueue* Initiate() { SeqPQueue *PQ = (SeqPQueue*)malloc(sizeof(SeqPQueue)); if(PQ == NULL) { printf("内存申请失败退出!"); exit(0); } /*PQ->data = (DataType*)malloc(maxSize*sizeof(DataType)); if(PQ->data == NULL) { printf("内存申请失败退出!"); exit(0); }*/ PQ->rear = 0; PQ->front = 0; return PQ; } /*非空否*/ int NotEmpty(SeqPQueue *PQ) //非空返回 1 ,为空时返回 0 { return PQ->rear != 0; } /*取优先级最高元素*/ DataType GetFront(SeqPQueue *PQ) { if(NotEmpty(PQ) == 0) { printf("队列为空,无法取到数据元素!"); exit(0); /*这个想改为 return 语句,但不知道怎么改*/ } else { int i; DataType min; min = PQ->data[PQ->front]; //设第一个元素的优先级最高 for(i = 0; i < PQ->rear; i++) { if(PQ->data[i].priority < min.priority) { min = PQ->data[i]; } } //*item = min; //把优先级最高的元素保存在 item 中 return min; } } /*入队列*/ int Append(DataType item,SeqPQueue *PQ) { if(PQ->rear >= maxSize) //if(PQ->data == NULL) //超出了申请内存的最大空间 /*(这种方法不成功)*/ { printf("队列已满,无法插入!"); return 0; } else { PQ->data[PQ->rear] = item; PQ->rear++; return 1; } } /*出队列*/ int Delete(SeqPQueue *PQ) //最高优先级的数据最先出队列 { if(NotEmpty(PQ) == 0) { printf("队列为空,无法删除数据!"); return 0; } else { int i,j = 0; /*这个 j 为什么必须初始化且要为 0 (不初始化会中断程序)*/ DataType min; min = PQ->data[PQ->front]; //设第一个数据优先级最高 for(i = 0; i < PQ->rear; i++) /*或者在这里 j = i */ { if(PQ->data[i].priority < min.priority) { min = PQ->data[i]; j = i; } //j = i; } for(i = j; i < PQ->rear-1; i++) { PQ->data[i] = PQ->data[i+1]; } PQ->rear--; return 1; } }main.c
#include <stdio.h> #include <stdlib.h> typedef int ElemType; #define maxSize 10 #include "SeqPQueue.h" void main() { DataType data; DataType item; SeqPQueue *mySeqPQueue = Initiate(); printf("请输入任务号及优先级(任务号为 0 时结束输入)\n"); while(1) { printf("请输入任务号(1-%d):",maxSize); scanf("%d",&(data.elem)); //输入任务号 if(data.elem == 0) //任务号为 0 时结束输入 { break; } printf("请输入优先级(0-40):"); scanf("%d",&(data.priority)); //输入优先级 Append(data,mySeqPQueue); } if(NotEmpty(mySeqPQueue) == 0) { printf("队列为空队列!\n"); exit(0); } printf("\n\n"); printf("%5c任务号 优先级\n\n",' '); while(NotEmpty(mySeqPQueue) == 1) { item = GetFront(mySeqPQueue); printf("%8d %d\n",item.elem,item.priority); Delete(mySeqPQueue); } }
相关文章推荐
- SeqPriorityQueue——顺序优先级队列
- 生产消费者4 - 实现一个基于优先级的传输队列【消费顺序是由优先级决定的而不是抵达时间】
- 安卓 消息队列 优先级 顺序
- 顺序表实现优先级队列
- 优先级PriorityBlockingQueue线程队列执行顺序
- C++ 之优先级队列
- 队列顺序循环存储实现
- 顺序队列C/C++实现
- 数据结构:循环队列(队列的顺序表示)
- 动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
- 【算法导论】堆排序和优先级队列
- 优先级队列
- 优先级队列:关键字小的优先处理。数组结构实现的优先级队列
- 循环队列(顺序队列)
- 优先级队列是一种什么样的数据结构
- 堆的应用(优先级队列、海量数据处理、堆排序)
- 最大优先级队列(6)
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
- 数据结构-循环顺序队列&链队列
- 链表,顺序表的基本操作及其实现的栈与队列