![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
IQ火箭炮
南中国一般大学普通工科IT学术起步幽默乐观男一枚
展开
-
中缀表达式的计算(含出错处理,括号处理)
以下是一个中缀表达式计算的程序,大体思路是利用两个栈,一个存放操作数,另外一个存放运算符,分别将输入的操作数和运算符存入其中,若输入的运算符优先级小于栈顶的运算符,则将栈顶的运算符取出,并将操作数栈的两个栈顶操作数取出进行运算,将运算结果重新填入栈中,而后将刚才输入的运算符压入运算符栈中。重复上述过程,直到运算符栈的有效运算符为空。为了区别不同运算符的优先性,我将+-*/的优先级的代号分别设为原创 2012-11-01 12:39:27 · 2993 阅读 · 1 评论 -
求最大网络流的C++实现(利用广度优先遍历的思想)
转载本博客上原创文章者,请注明出处。基本思想:利用广度优先遍历的思路,从一个可行流(一般取零流)开始,不断进行标号过程和调整过程,直到找不到起点到终点的可增广路径为止。1、标号过程在这个工程中,网络上的点分为已标号点和未标号点。将起始点标号,其他刚开始未标号。从起始点开始,利用广度优先算法进行遍历,找到一个未标号点时,看临接的标号点与之是正向边还是反向边,以此来进行相应的标号(标号原创 2012-12-20 17:01:45 · 4075 阅读 · 0 评论 -
求任意权值最短路径的Bellman-Ford算法实现
转载本博客上原创文章者,请注明出处。Bellman-Ford算法可以用来解决所要求的最短路径的图中含有负数边的情形。算法的基本思想:如果两个结点间存在最短路径,那么这条路径中各个结点最多经过一次(因为如果超过一次,说明路径中有环,如果是正数环,会使路径权值增长;若为负数环,最短路径不存在;若为零环,不影响结果)。因此我们只需迭代n-1次,将起始点到其他各点最多经过n-1条边的最短路径求原创 2012-12-17 08:14:55 · 3532 阅读 · 0 评论 -
每对结点之间最短路径的C++实现
转载本博客上原创文章者,请注明出处。Dijkstra算法和Bellman-Ford算法只能计算出起始点到其他各点的最短路径,但不能计算任意两队顶点之间的最短路径。若真想利用这两张算法,可以来一个循环,每次让不同的顶点成为起始顶点,这样也可以解决,但这种方法效率比较低,所以要想其他方法。我们可以用最优化的原理来求每对顶点之间的最短路径,基本思想是:假设图中有一条从i到j结点的最短路径,k原创 2012-12-17 14:03:28 · 5104 阅读 · 1 评论 -
Dijkstra算法实现非负权值最短路径的求解(另用小根堆进行优化)
利用Dijkstra算法求解非负权值的最小值,基本思想是,进行n-1轮的循环,每一轮都是:求出单边条件下起始结点v0到其他各结点的最短距离,并将邻接到的这个点v1标为“已处理过”,然后再以v1作为中转,找到跟v1距离最近的剩下的顶点v2,接着比较dist[v2]的值和dist[v1]+weight[v1][v2],如果dist[v2]较大,则将dist[v2]改写为dist[v1]+weight[原创 2012-12-09 14:25:37 · 2525 阅读 · 1 评论 -
二叉树基本功能的汇集(C++类实现)
二叉树是程序应用得比较多的一种结构。它可以反映物体之间的层次结构,还能通过孩子和双亲反映两物体之间某些特殊关系;排序二叉树还能帮助我们进行排序,并因此而提供快速的查找;二叉树基础上的伸展树能不断地优化我们系统的结构。并查集能很好地让我们进行分类;小根堆能帮助我们快速找到值最小的结点,它是优先队列的雏形。所有的这些都是以二叉树为基础的。我实现的二叉树的基本功能包括前中后序的递归和非递归访问,求结原创 2012-12-06 18:13:30 · 17403 阅读 · 2 评论 -
Prim算法实现最小生成树(图模型+小根堆)
Prim算法实现最小生成树的思想是:在图中取一个顶点为起始点,找出其邻接的所有顶点,将该点和邻接的顶点和边的权值一一压入小根堆中,接着从小根堆中退出小根堆的根,将没访问过的两个顶点及其关联边的权值插入到最小生成树中,以此类推,总共需要循环n-1次。小根堆模块:int heapNum=0; //记录堆的结点个数//堆的结点结构struct Heap{ int sta,en;原创 2012-12-05 18:04:05 · 5096 阅读 · 0 评论 -
kruskal算法实现最小生成树(图模型+小根堆+并查集)
生成树,是原连通图的极大无环子图,而最小生成树则是所有权值之和最小的这种图。kruskal算法的入手点是边。它每次取出这个图中权值最小的一条边,并得到这条边关联的两个顶点v1、v2,接着验证v1、v2之间是否存在通路,如果存在通路则舍弃它,如果不存在则将这两个顶点压入最小生成树中。在我的程序中,实现取图中权值最小的边用的是小根堆,实现判断两个顶点v1、v2是否存在通路用的是并查集,因为原创 2012-11-30 15:35:29 · 3388 阅读 · 1 评论 -
拓扑排序的C++实现(邻接表存图)
拓扑排序可以帮我们解决每两个物体之间有先后关系时遍历所有物体的问题,比如功课有先修后修关系时的排课表问题。程序是用图模型来实现的,首先先用邻接表的存储模型来建立整个图,然后调用拓扑排序算法。其中,拓扑排序用到一个记录每个结点入度数的临时数组,还用到一个栈结构,用来存取入度数为0的结点。如果图中含有有向环时则输出提示信息。#include #include #include #incl原创 2012-11-29 19:05:58 · 4519 阅读 · 1 评论 -
最小堆的C++实现
最小堆,即树根的值是最小的,也是一棵完全二叉树。它以层次结构来区分值的大小。并且最小堆可以帮助我们高效地取出具有最小值。它也是实现优先级队列的高效结构。#include using namespace std;int heap[100];//下滑操作void siftDown(int start,int end){ //将start号结点向下调整直到end int i=s原创 2012-11-08 15:57:25 · 7684 阅读 · 0 评论 -
C++实现的完整伸展树程序
这两天学了伸展树,然后参考老师的一些源代码自己尝试写了下完整的实现过程。不过发现程序有些错误,于是自己开始调试,通过仔细地调试、一步步跟踪最终解决了自己发现的问题,在这个过程中发现伸展树的伸展过程挺复杂的,不过自己也从中提高了自己调试程序的能力,也加深了自己对伸展树程序执行过程的理解。如果大家发现以下程序的问题的话欢迎一起交流学习。#include using names原创 2012-11-03 15:55:28 · 1762 阅读 · 0 评论 -
huffman树的C++基本实现(小根堆+二叉树实现)
huffman树是堆的一种重要的应用,huffman树在编码领域也是有着重要的用途。huffman树的基本实现思路:将所有结点的权值压到堆中,每次从堆中取出权值最小的两个结点(注意要从堆中删除它们);再新建一个结点,将这两个结点的权值之和作为新结点的权值,并将以这两个结点为树根的树作为新结点的左右子树;再将新结点压入栈中;以此类推,直到堆中只剩一个结点为止,此时这个结点就是所生成的huffma原创 2012-12-13 17:10:01 · 2676 阅读 · 0 评论