现在的位置: 首页 > 综合 > 正文

PQueue

2012年12月11日 ⁄ 综合 ⁄ 共 1022字 ⁄ 字号 评论关闭
#include <assert.h>
#include <stdlib.h>
#include <iostream>

const int DEFAULT_PQ_SIZE = 50;

template<typename T>
class PQueue {
public:
  PQueue(int sz = DEFAULT_PQ_SIZE);
  ~PQueue() { delete[] elems; }
  bool insert(const T& x);
  bool remove_min(T& x);
  bool get_front(T& x) const;
  void make_empty() { count = 0; }
  bool is_empty() const { count == 0; }
  bool is_full() const { count == maxsize; }
  int get_size() const { return count; }
protected:
  T *elems;
  int count;
  int maxsize;
  void adjust();
};

template<typename T>
PQueue<T>::PQueue(int sz): maxsize(sz), count(0) {
  elems = new T[maxsize];
}

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

template<typename T>
void PQueue<T>::adjust() {
  T temp = elems[count - 1];
  int j ;
  for (j = count - 2; j >= 0; j--) {
    if (elems[j] <= temp) break;
    else elems[j + 1] = elems[j];
  }
  elems[j + 1] = temp;
}

template<typename T>
bool PQueue<T>::remove_min(T& x) {
  if (is_empty())
    return false;
  x = elems[0];
  for (int i = 1; i < count; i++)
    elems[i - 1] = elems[i];
  count--;
  return true;
}

template<typename T>
bool PQueue<T>::get_front(T& x) const {
  if (is_empty())
    return false;
  else {
    x = elems[0];
    return true;
  }
}

抱歉!评论已关闭.