算法
sinat_27233737
这个作者很懒,什么都没留下…
展开
-
图——邻接表
typedef char VertexType;//顶点类型#define MAXVEX 20typedef struct EdgeNode { int adjvex;//邻接点域,用于存储该顶点对应下标 EdgeNode *next;}EdgeNode;typedef struct VerTexNode { VertexType data; EdgeNode原创 2016-12-15 10:54:00 · 185 阅读 · 0 评论 -
树——二叉树的序列化和反序列化
最开始看到序列化和反序列化我是懵逼的==感觉好高大上啊,等查了下定义才发现,不就是从文件中读取数据,构建树咩typedef struct BitNode{ char data; BitNode *left; BitNode *right;}*BitTree;bool rdisplay(BitTree &b) { char c; in >> c; i原创 2017-09-08 10:50:22 · 240 阅读 · 0 评论 -
判断元素出栈顺序是否合法
题目描述给定一个入栈序列,给定一个出栈序列,判断该出栈序列是否合法思路从两个数组的第一个元素开始,如果栈为空,或者栈顶元素不等于当前出栈数组当前下标对应的元素时,将当前入栈数组中下标所指向的元素进行压栈1.初始状态,栈为空 2.因为栈为空,因此将入栈数组下标所指向的元素1压入栈,入栈数组下标向后移一位 3.因为当前栈顶元素1不等于出栈数组下标所指向的元素4,因此将入栈数组下标所指向的元素原创 2017-09-16 16:37:50 · 580 阅读 · 0 评论 -
最大子串和问题
问题给定一组数字,求连续的字串的最大的和。 这里要注意题目中是子串和而不是子序列和。 子序列只要求各元素的顺序与其在数组中一致,而没有连续的要求。如果求子序列,可直接把这组数字中的正数相加即可。最开始想着只要把这组数字中各个正数子序列分别求和,比较哪个大就行了,后来发现不对。比如:{1,2,3,-1,3,1},正数子序列分别为{1,2,3},{3,1},其和分别为6和4,但事实上,1+原创 2017-09-16 22:03:14 · 415 阅读 · 0 评论 -
二叉树——高度
int getHeigh(BitTree b) { if (b == nullptr) return 0; else { int left = getHeigh(b->left); int right = getHeigh(b->right); return 1 +((left > right) ? left : rig原创 2017-09-17 00:16:36 · 198 阅读 · 0 评论 -
面试常考排序
交换排序void jh_sort(int *a,int len) { for (int i = 0; i < len; i++) { for (int j = i; j < len; j++) { if (a[i] > a[j]) swap(a[i], a[j]); } }}冒泡排序void m原创 2017-09-18 16:29:38 · 582 阅读 · 0 评论 -
树——数的子结构
bool DoesTreeaequalsTreeb(BitTree a, BitTree b) { if (b == nullptr) return true;//b指向了nullptr,说明这一方向遍历到最后一个数了,无论a指向什么,都无所谓了 if (a == nullptr)//b还有节点没比较,但a已经没有子节点可以比较了,肯定不相等 retur原创 2017-09-18 16:33:06 · 358 阅读 · 0 评论 -
树——重建二叉树
①先处理传入的数组,如果数组没问题了,正式开始根据两个数组构建树BitTree Construct(char *preorder, char *inorder, int len) { if (preorder==nullptr || inorder==nullptr || len < 0) return nullptr; return ConstructCore(pr原创 2017-09-12 10:01:59 · 143 阅读 · 0 评论 -
深度优先搜索——神奇的矩环
题目 小鑫的女朋友被魔王抢走了! 魔王留给小鑫一张n*m大的表,上面有各种各样的颜色,用A-Z这26个字母来表示。魔王留给他一个任务,如果小鑫可以在这张表中找出任意一个长度大于1的环,并且这个环的颜色是相同的,魔王就把小鑫的女朋友还给他。为了从魔王手中夺回他的女朋友,小鑫请你帮忙,你能帮帮他吗?Input 多组输入。 每组的第一行有两个整数n,m。代表表的大小。 接下来是由A-Z的一些字母原创 2017-09-12 14:39:09 · 245 阅读 · 0 评论 -
二叉树中和为某一值的路径
开始想的是按照求最大值路径的方法,来求出每一条路径的值,后来发现没办法自底向上求出每一条路的值。int max_path(BitTree b) { if (b == nullptr) return 0; int temp1 = b->data + max_path(b->left); int temp2 = b->data + max_path(b->righ原创 2017-09-22 15:13:20 · 174 阅读 · 0 评论 -
在字符串中找出连续最长的数字串
INPUT输入一个字符串OUTPUT输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度#include <iostream>#include <string>#include <vector>using namespace std;int main() { string s; while (cin >> s) {原创 2017-09-15 23:10:29 · 221 阅读 · 0 评论 -
最长对称子串
对于任何一个位置i,当对称的数组是一个奇数时,对称的个数初始就为1,然后以i为原点向外比较i-j和i+j,如果i-j和i+j相等,则对称的个数+2,如果不相等就立刻跳出循环。 int temp = 1; for (int j = 1; j < len; j++) { if ((i - j < 0) || (i + j > 0) || s[i - j] !=原创 2017-09-15 12:27:53 · 989 阅读 · 1 评论 -
图——Kruskal算法
void swap(Edge L[], int i, int j) { Edge temp = L[i]; L[i] = L[j]; L[j] = temp;}void BubbleSort(Edge L[],int num) { int i, j; for (i = 0; i < num; i++) { for (j = num - 1;原创 2016-12-22 17:53:31 · 209 阅读 · 0 评论 -
图——Dijkstra算法
Dijkstra算法的基本过程 假设路网中每一个节点都有标号,记为vi,i是其编号。D[i]是从起点v0到某点vt的最短路径长度;P[i]表示从v0到vi的最短路径中i点的前一个点的编号。求解从起点v0到终点(或图中任意一点)vt的最短路径算法的基本过程为:假设路网中每一个节点都有标号 是从出发点s到点t的最短路径长度;表示从s到t的最短路径中t点的前一个点。求解从出发点s到点t的最短路径算法的基原创 2016-12-29 18:42:42 · 342 阅读 · 0 评论 -
图——Floyd算法
typedef int Pathmatirx[MAXVEX][MAXVEX];//v到w最短路径P[v][w]typedef int ShortPthTable[MAXVEX][MAXVEX];//v到w带权长度void ShortestPath_Floyd(MGraph G, Pathmatirx *P, ShortPthTable *S) { int v, w, k; for原创 2016-12-30 17:31:06 · 220 阅读 · 0 评论 -
图——Prim算法
Prim算法是从点的方面考虑构建一颗MST。 其大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。因为有原创 2016-12-20 15:17:30 · 486 阅读 · 0 评论 -
线性表的链式存储结构
线性表的链式存储结构本文是学习《大话数据结构》的个人心得基础定义单链表的整表创建单链表的整表删除单链表的读取单链表的插入删除基础定义//这里已默认定义了所需的头文件和using namespace std;typedef struct Node { int data; Node *next;}relNode;typedef relNode *LinkList;//Li原创 2016-11-20 17:00:06 · 274 阅读 · 0 评论 -
图——AOV拓扑排序
typedef struct EdgeNode{ int adjvex; int weight; EdgeNode *next;};typedef struct VerTexNode { int in;//入度 VertexType data; EdgeNode *next;}VerTexNode,AdjList[MAXVEX];typedef原创 2017-01-08 16:33:38 · 318 阅读 · 0 评论 -
队列
#ifndef QUEUE#include <iostream>using namespace std;typedef int ElemType;typedef bool Status;typedef struct QNode { ElemType data; QNode* next;}QNode,*QueuePtr;typedef struct { QueueP原创 2017-02-01 10:58:30 · 179 阅读 · 0 评论 -
树——二叉树的镜像
递归实现:void Mirrordisplay(BitTree &b) { if (!b) return;//这里要考虑到最开始b就传入了一颗空树!!! if ((b->left == nullptr) && (b->right == nullptr)) return;//到了叶子结点返回了 BitTree c = b->left; b原创 2017-09-06 15:27:57 · 183 阅读 · 0 评论 -
树——二叉树层序遍历
收到二叉树镜像非层序遍历的启发,今天居然无师自通了老是记不住的二叉树层序遍历。void leveltraver(BitTree &b) { if (!b) return; queue<BitTree> s; s.push(b); while (s.size()) { BitTree p = s.front(); s.po原创 2017-09-06 16:25:47 · 178 阅读 · 0 评论 -
字符串的排列
#include <iostream>#include <string>using namespace std;int book[1000];char a[1000];void find_string(string &s, int len,int n) { if (n == len ) { for (int i = 0; i < len; i++)原创 2017-09-22 16:21:15 · 179 阅读 · 0 评论