`

优先级队列

阅读更多
PQueue.h
#ifndef PQUEUE_H
#define PQUEUE_H

#include<assert.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
const int DefaultPQSize=50;

template<typename T>
class PQueue{
public:
    PQueue(int sz=DefaultPQSize);
    ~PQueue(){
        delete[] pqelements;
    }
    bool Insert(const T& x);
    bool RemoveMin(T& x);
    bool getFront(T& x)const;
    void makeEmpty(){count=0;}
    bool IsEmpty()const{
        return count==0?true:false;
    }
    bool IsFull()const{
        return count==maxSize?true:false;
    }
    int getSize()const{
        return count;
    }
    friend ostream& operator<<(ostream& os,PQueue& pq){
        for(int i=0;i<pq.count;i++){
            os << pq.pqelements[i] << " ";
        }
        os << endl;
        return os;
    }

protected:
    T * pqelements;
    int count;//当前元素个数
    int maxSize;
    void adjust();
};

template<typename T>
PQueue<T>::PQueue(int sz):count(0),maxSize(maxSize)
{
    pqelements = new T[sz];
    assert(NULL!=pqelements);
}

template<typename T>
bool PQueue<T>::Insert(const T &x)
{
    if(IsFull()){
        return false;
    }
    pqelements[count++]=x;
    adjust();
}

/*
  将最新插入的结点放到合适的位置,相当于排序
  */
template<typename T>
void PQueue<T>::adjust()
{
    T last = pqelements[count-1];
    int j;
    for(j=count-2;j>0;j--){
        if(pqelements[j]<=last){
            break;
        }else{
            pqelements[j+1] = pqelements[j];
        }
    }
    pqelements[j+1]=last;
}

template<typename T>
bool PQueue<T>::RemoveMin(T &x)
{
    if(IsEmpty()){
        return false;
    }else{
        for(int i=1;i<count;i++){
            pqelements[i-1] = pqelements[i];
        }
    }
    count--;
    return true;
}

template<typename T>
bool PQueue<T>::getFront(T &x) const
{
    if(IsEmpty()){
        return false;
    }
    x = pqelements[0];
    return true;
}

#endif // PQUEUE_H


PQueue.cpp
#include"PQueue.h"

int main()
{
    PQueue<int> pq;
    int num=1;
    for(int i=0;i<10;++i){
        pq.Insert(num++);
    }
    cout << pq;
    pq.RemoveMin(num);
    cout << pq;
    pq.makeEmpty();
    cout << pq;
}

1 2 3 4 5 6 7 8 9 10 
2 3 4 5 6 7 8 9 10 

分享到:
评论

相关推荐

    队列的应用:优先级队列

    使用顺序存储实现优先级队列,展示优先级队列和普通队列的区别之处。

    一个用堆实现的优先级队列

    优先级队列是一种特殊的数据结构,它按照优先级顺序存储元素,最高优先级的元素总是在队列的前端。在计算机科学中,堆通常被用来实现优先级队列。堆是一种完全二叉树,其中每个父节点的值都大于或等于(最大堆)或...

    优先级队列(堆实现)

    优先级队列是一种特殊的线性数据结构,它在处理元素时遵循特定的优先级规则,通常最高优先级的元素会被最先处理。在Java中,优先级队列是通过`java.util.PriorityQueue`类来实现的,它基于一个二叉堆(Binary Heap)...

    优先级队列cpp文件PriorityQueue.cpp

    优先级队列cpp文件PriorityQueue.cpp

    基于双端堆实现的优先级队列

    dheap(插入元素)、pop_max_dheap(删除最大元素)、pop_min_dheap(删除最小元素),is_dheap(堆验证)五个泛型算法,在此基础上实现了一个能在对数时间内获取最大和最小元素的优先级队列,相当于原stl优先级队列...

    priority queue优先级队列

    算法中优先级队列问题...用堆排序的算法来做的例子

    数据与算法:2基本数据结构7-优先级队列.pdf

    数据结构与算法之优先级队列 优先级队列(Priority Queue)是一种特殊的队列,它不同于一般的先进先出队列,而是每次从队列中取出的是具有最高优先权的元素。优先级队列的实现方式有多种,可以基于有序顺序表、无序...

    第10章-优先级队列2

    优先级队列的设计和实现 在计算机科学中,数据结构是一个非常重要的概念,它直接影响着算法的效率和程序的可读性。其中,优先级队列是一种特殊的数据结构,它支持对数据对象的优先级访问和操作。本章将对优先级队列...

    c语言实现优先级队列

    用c语言实现的,简单易懂,希望对大家有用。

    数据结构课设——小大根交替堆实现的双端优先级队列及应用

    数据结构课设——小大根交替堆实现的双端优先级队列及应用 小大根交替堆是一种特殊的堆结构,它可以同时满足大根堆和小根堆的性质。在本文中,我们将对小大根交替堆实现的双端优先级队列进行详细的分析和设计。 ...

    毕业设计MATLAB_优先级队列.zip

    在毕业设计中,MATLAB 被广泛应用于各种科学计算和数据分析任务,而优先级队列(Priority Queue)是数据结构中的一个重要概念,它在许多算法和应用中扮演着核心角色。优先级队列通常不直接内置在MATLAB中,但可以...

    堆排序、优先级队列(c++模板实现)

    使用c++模板实现的堆排序、优先级队列,在vs2010下编译运行通过。压缩文件里为两个工程文件,如果有vs2010的话解压缩打开sln文件就可以了,没有的话,新建工程将文件复制过去就ok了。如果有问题可以留言。

    PriorityQueue-MEX-Matlab 优先级队列 matlab

    优先级队列是一种特殊的数据结构,它在处理数据时遵循“优先级”原则,即具有较高优先级的元素会先于低优先级的元素被处理。在计算机科学中,优先级队列通常用于调度任务、事件处理和其他需要快速访问最高优先级元素...

    os.rar_优先级 队列

    在"os.rar_优先级 队列"这个主题中,我们将深入探讨操作系统如何利用优先级队列来管理进程,确保高效和公平地执行任务。 首先,进程是操作系统中运行的程序实例。在多任务环境中,操作系统需要决定哪个进程应该获得...

    第10章-优先级队列1

    "优先级队列" 在数据结构中,优先级队列是一种特殊的队列,队列中的每个元素都有一个优先级,队列的出队顺序是按照元素的优先级从高到低的顺序。优先级队列可以用来解决许多实际问题,如任务调度、资源分配等。 本...

Global site tag (gtag.js) - Google Analytics