数据结构
文章平均质量分 79
汐新酱
学生
展开
-
【C++】优先队列
优先队列是一种抽象数据结构,定义了插入、删除和获取最大/最小元素等操作。堆是一种具体的数据结构,可以用来实现优先队列。堆是一个近似完全二叉树,并且满足堆序性质:父节点的值总是大于(或小于)子节点的值。二叉堆是一种特殊的堆,完全二叉树,通常用数组表示。二叉堆很适合实现优先队列,时间复杂度为O(logn。优先队列强调数据元素的优先级与排序,堆提供了一种数据结构来高效实现这一功能。参考文献[1]张铭,王腾蛟,赵海燕编著,《数据结构与算法》,高等教育出版社,2008.6。原创 2024-04-23 21:05:41 · 273 阅读 · 0 评论 -
【C++】两种贪婪算法:Prim 算法和Kruskal算法的实现与有效性证明
1. 本实验使用C++实现了 Kruskal 算法和 Prim 算法两个最小生成树算法,并对不同的图反复进行了测试,验证了算法的正确性。2. Kruskal 算法的实现使用了并查集数据结构判断环的形成,时间复杂度为O(ElogV)。Prim 算法使用了最小堆优先队列实现,时间复杂度为O(V2)。3. 对于稠密图,Kruskal算法由于时间复杂度较低,执行速度较快。对于稀疏图,两种算法时间消耗相近。4. 最小生成树有着广泛的应用,如网络中的最低成本连接,关键路径分析等。原创 2024-04-23 12:00:00 · 726 阅读 · 0 评论 -
【C++】使用栈解决括号匹配问题
括号匹配实际上并不难做,对于多种括号匹配如:“【】”“()”等等只需要新建栈来分别匹配处理,而匹配模式都是一样的,故本实验只处理花括号“{ }”就具有一般性。难点在于输出非匹配的括号位置,需要单独设置一个数据结构进行存储,这里我使用了数组来存储位置信息,并与栈操作同时进行,当括号出栈时,会删去数组中的信息。并且通过逐行读取文本,字符串大小检测,可以缩小时间和空间复杂度。另一个难点是判断条件区分,要准确识别哪些括号是不匹配的。现在的代码编辑器自带有匹配识别(如颜色区分),方便了检验和确定算法的可靠性。原创 2024-04-22 14:13:05 · 522 阅读 · 0 评论