- 博客(17)
- 收藏
- 关注
原创 检查图是否包含环
我们常常用检查一张图中是否包含环来判断是否可以对这张图进行拓扑排序。但是对于无向图,由于无向图中每条边都可以表示成其对应某点的入边和出边,所以不能用拓扑排序的方法来检查是否包含环。但是我们可以用DFS方法来进行检查:从某一个点开始进行DFS遍历,如果在某个点所连接的点中,包含一个已经经过过的且不是这个点的父节点的点,说明有环。 代码://有向图bool checkLoop(vector<vect
2017-03-06 15:41:15
517
原创 用二叉树存储计算四则运算表达式
这是数据结构课作业,写了很久,代码主要思路参考了网上某个博客(但忘了是哪个博客),不过也融入了我自己的一些思路。//将字符串类型的四则运算表达式存入二叉树中,支持小数运算和多级括号运算,同时能够将二叉树结构输出到屏幕或者某个txt文件(一棵横着的二叉树),目前一大缺陷是不能检查输入是否有误,/*测试样例:1+2 1*9/3 764+743/90*45+56-87 8*(9+2*(3+(4*
2016-11-27 16:10:32
7078
4
原创 二叉树中的先序遍历、中序遍历和后序遍历关系
先序、中序以及后序遍历是我们遍历二叉树常用方法,当然还有层级遍历。前三者属于深度优先遍历,后者属于广度优先遍历。今天我们谈谈前面三种遍历的关系。即,已知先序、中序、后序遍历中的哪几种可以确定一棵树的结构,从而得出另一种或两种遍历的结果。 首先假设我们只知道三种遍历中的一种的结果。显然只知道一种遍历结果不能确定一棵树的结构,先序遍历和后序遍历只能找到根节点,不能判断左右子树;中序遍历甚至连根节点都找
2016-11-17 14:24:33
7076
原创 用javascript实现多表单提交同一信息
昨天碰到一个问题:有多个表单要提交一个相同的信息,而这个信息只需要填写一次就行了。如果在每个表单中都填写一次的话太麻烦而且没必要。于是用javascript实现了这个功能。<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>test</title> <script> fu
2016-11-04 09:34:46
358
原创 迷宫寻址代码分析
最近学了堆栈,里面有个迷宫寻址的程序蛮有意思的,觉得程序的思路也很厉害。以下代码的迷宫寻址函数是《数据结构、算法与应用 C++语言描述》上的,自己也有一点小的改动。其中关于代码的分析都在注释中了,希望能看懂。#include<iostream>using namespace std;struct Position{ friend ostream& operator<<(ostrea
2016-10-30 23:14:40
544
原创 使用递归求出一个集合的所有子集
想一下,平时如果给你1,2,3,4四个数,让你写出它的所有子集,你会怎么做? 我想大部分人的思路是先写出子集中只含有一个元素的子集:1;2;3;4。然后考虑子集中含有两个元素的子集:1,2;1,3;1,4;2,3;2,4;3,4。然后是子集中含有三个元素的子集:1,2,3;1,2,4;1,3,4;2,3,4。最后是自己:1,2,3,4。当然别忘了还有一个空集。 好的,如果能够这么想说明思路还是挺
2016-09-21 21:05:46
16469
2
原创 利用递归输出全排列
当我们有一个所有元素都互不相同的数组,且准备把里面的元素进行全排列时,我们会怎么做?举个例子,现在我们有一个含有1,2,3三个元素的数组,现在我们准备找出它们的全排列。大部人的做法是先在第一个位置放1,第二个位置放2,第三个地方放3;然后还是第一个位置放1,交换2和3的位置;之后换成2放在第一个,对1和3进行之前相似的做法。那么当我们有很多数时,思路也是类似的,就是先固定前面的数的排序,然后依次
2016-09-12 21:47:13
1647
原创 浅谈插入排序
插排其实挺简单的,理解起来比快排、归并排序容易多了,但是插排挺慢的,时间复杂度是O(n^2)。 它的思路就是从第i项起,假设前面的已经全部排好,这时候第i项一直往前移动,直到找到适合它的位置,然后插进去。移动期间需要不断的把前一位的值赋给当前位置,这样就可以避免到时候找到适合自己位置后还要重新走一遍原来的路,把各个数移位,节省了时间。当然如果你一定要先找到位置再来移位也是可以的。而且如果你要从第0
2016-06-21 15:13:56
334
原创 对于二维数组,&a与&a[0]与a一样吗?
一样,又不一样。 说一样,是因为它们的值是一样的;说不一样,是因为他们的类型不一样。 这里,我做了一组测试:int a[2][2] = { 1,2,3,4 };auto g = &a;auto p = &a[0];auto q = a[0];cout << g << endl;cout << p << endl;cout << q << endl;输出的结果都是008FFE98。
2016-06-21 14:28:35
3821
原创 浅谈归并排序
昨晚睡前看了下刘汝佳紫书上关于归并排序的介绍,很想自己实现一遍,于是趁着今天下午复习马基的时间自己手动敲了一遍代码。由于之前有快排的经验,所以这次理解起归并排序并不十分困难。 先上自己写的代码:void merge_sort(int num[], int left, int right, int temp[]){ if (left == right) return;
2016-06-10 15:36:06
493
转载 C++ 类的静态成员详细讲解
转载,原文地址:http://blog.csdn.net/morewindows/article/details/6721430 在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静
2016-06-08 11:17:45
237
原创 一个简易的Set容器
由于临近期末,课都上的差不多了,所以最近多了很多空闲时间来思考和写代码。今天闲的无聊,决定撸一个简易的集合容器练练手。本以为是一件挺简单的事情,可是当完成起来的时候才发现没那么容易。惯例:先上代码。//head.h#ifndef SET_H#define SET_H_template<typename T>class Set { struct member { T
2016-06-08 01:25:55
312
原创 大数相加与相乘
//先说相加#include<iostream>#include<cstring>using namespace std;int main(){ char num1[200]; char num2[200]; //用以存放反转后的字符串 char num3[200]; char num4[200]; //用以存放结果,到时候从后往前输出即可
2016-06-06 00:14:52
390
原创 浅谈快速排序
今天早上花了大约两个小时时间研究了下快排的思想(请别嘲笑我可怜的智商),终于把其中的奥妙搞得比较清楚了。为了防止忘掉,特地写这篇文章来加深印象。总的来说,快排是运用了分治和递归的思想:先找一个基准点,然后把数组中比这个基准大的数放到一边,把比它小的数放到另一边。比如找基准9,那么把比9小的数放在9的左边,把比9大的数放在9的右边。然后调用递归使9左边和9右边的数字们也同样的分别排序,最后一定可以从
2016-05-26 15:12:11
317
原创 用c++实现单向链表和双向链表
链表是一种非常基础的数据结构,本身也比较灵活,突破了数组在一开始就要确定长度的限制,能够做到随时使用随时分配内存。同时还有添加,删除,查找等功能。总的来说,链表是由几个模块构成的。 一,单向链表//链表基本元素struct Node{ int num; Node * next;};//创建节点 Node * current=nullptr; Node * head
2016-05-20 19:58:28
1147
1
原创 浅谈多重继承
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-05-14 23:44:44
721
原创 浅谈c++中的构造函数
下面所有的构造函数都将用Student这个类作为例子class Student{private: static int count;//不属于任何一个对象 std::string name; char *gender; int age; int grade;public: .........};int Student::count=0;一:
2016-05-09 22:29:46
541
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人