优先队列

大学以来一直听闻优先队列,只是知道个大概不知道具体是怎么用的。今天终于横下心来实现一波优先队列,整体上看了一遍书上的思路就基本明白了优先队列的思想,然后水到渠成地敲出了一个优先队列,也没有遇到多少难缠的bug,学到了一个很好的移动线性表的方法。在考试之前我们所有的一切都是新东西,遇到一个新题目首先去尝试自己想,想不出来立马清空脑袋,接受全新的解题思路,不要尝试用现有的知识去推导新的题目,就像大二的时候学了数据结构却一直在用老旧的c语言大一知识做题,真是很幼稚了,虽然能跑出来正确的结果,现在终于理解了老师为什么不给我作业分。
priorque.h

#pragma once
template<class T>
class priorque {
private:
	int count;
	T *pqelements;
	int maxsize;
	void adjust();
public:
	priorque(int size);
	~priorque();
	bool insert(T &x);
	bool getfront(T &x);
	bool removemin(T &x);
	void makeEmpty() { count = 0; }
	bool isEmpty() { return (count == 0) ? true : false; }
	bool isFull() { return (count == maxsize) ? true : false; }
};
template<class T>
priorque<T>:: ~priorque() {
	count = 0;
}
template<class T>
 priorque<T>::priorque(int size) {
	 maxsize = size;
	 pqelements = new T(maxsize);
	 count = 0;
}
 template<class T>
 bool priorque<T>::insert(T &x) {
	 if (count == maxsize)return false;
	 pqelements[count++] = x;
	 adjust();
	 return true;
 }
 template<class T>
 void priorque<T>::adjust() {
	 int i = 0;
	 int temp = pqelements[count - 1];
	 for ( i = count - 2; i >= 0; i--)
		 if (temp >= pqelements[i])break;
		 else  pqelements[i + 1] = pqelements[i];
		 pqelements[i + 1] = temp;
 }
 template<class T>
	bool  priorque<T>::removemin(T &x) {
		if (count == 0)return false;
		else {
			x = pqelements[0];
			for (int i = 0; i < count; i++)
				pqelements[i] = pqelements[i + 1];
			count--;
		}
		return true;
 }
template<class T>
bool priorque<T>::getfront(T &x) {
	if (count == 0)return false;
	x = pqelements[0];
}
 

main.cpp:

#include"priorque.h"
#include<iostream>
using namespace std;
int main() {
	priorque<int> s(10);
	int p = 0;
	int x = 3;
	for (int i = 0; i < 9; i++)
		s.insert(i);
	s.insert(x);
	while (!s.isEmpty()) {
		s.removemin(p);
		cout << p << endl;
	}
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值