
算法与数据结构
算法与数据结构相关博客
白水baishui
天光乍破
-
原创 m阶B树的非根非叶结点至少要ceil(m/2)个孩子原因
B树的定义中有一个规定:除根结点和叶结点之外,其他每个结点至少有⌈m2⌉\lceil\frac{m}{2}\rceil⌈2m⌉个孩子,至少要有⌈m2⌉−1\lceil\frac{m}{2}\rceil-1⌈2m⌉−1个关键字为什么要这样规定呢?我们假设现在有一棵深度为1的5阶B树:现在往B树中添加一个结点,在有限制的情况下是这样分裂的:如果没有对孩子结点和关键字个数进行限制,那么可以分裂出如下B树:可见,同样是5个关键字,有限制的5阶B树只有3个结点,而未进行限制的5阶B树却有42020-08-30 11:46:242511
1
-
原创 有向图的邻接表(Adjacency List)
listNode.h#ifndef __LISTNODE_H__#define __LISTNODE_H__class EdgeNode{public: int adjVex; EdgeNode * next;};template <class T>class VertexNode{public: T vertex; EdgeNode * firstEd...2018-12-21 19:07:051152
0
-
原创 无向图的邻接矩阵(adjacency matrix)
MGraph.h#ifndef __MGRAPH_H__#define __MGRAPH_H__const int MaxSize = 10;template &amp;amp;amp;lt;class T&amp;amp;amp;gt;class MGraph{public: MGraph(T _maxtrix[], int _vertex, int _edge); ~MGraph();public: void DF...2018-12-20 22:31:336059
0
-
原创 哈夫曼树(最优二叉树)与哈夫曼编码
huffmanNode.h#ifndef __HUFFMANNODE_H__#define __HUFFMANNODE_H__class huffmanNode{public: int weight; int lchild, rchild, parent;};#endifhuffmanTree.cpp#include &amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt;2018-12-19 22:05:13618
0
-
原创 二叉树(Binary Tree)的二叉链表(Binary Linked List)实现
BinaryNode.h#ifndef __BINARYNODE_H__#define __BINARYNODE_H__template &amp;amp;lt;class T&amp;amp;gt;class BinaryNode{public: T data; BinaryNode&amp;amp;lt;T&amp;amp;gt; *lchild, *rchild;};#endif2018-12-18 16:15:59386
0
-
原创 字符串的模式匹配算法——BF算法与KMP算法
#include &amp;lt;iostream&amp;gt;#include &amp;lt;string&amp;gt;using namespace std;//BF算法实现int BF(string _str, string _patnStr){ int i = 0, j = 0; while ((_str[i] != '\0') &amp;amp;&amp;amp2018-12-17 15:48:041178
7
-
原创 队列的顺序存储结构 循环队列(Circle Queue) C++
CirQueue.h#ifndef __CIRQUEUE_H__#define __CIRQUEUE_H__const int queueSize = 100;template &lt;class T&gt;class CirQueue{public: CirQueue(); ~CirQueue(); void EnQueue(T _data); T DeQueue();...2018-12-13 20:38:45723
0
-
原创 栈的链式存储结构 链栈(Linked Stack) C++
StackNode.h#ifndef __STACKNODE_H__#define __STACKNODE_H__template &amp;lt;class T&amp;gt;class StackNode{public: T data; StackNode&amp;lt;T&amp;gt;* nextNode;};#endifStackList.h#ifndef __STACKLI2018-11-03 10:44:17667
0
-
原创 栈的顺序存储结构 顺序栈(Sequential Stack) C++
seqStack.h#ifndef __SEQSTACK_H__#define __SEQSTACK_H__const int size = 10;template &amp;lt;class T&amp;gt;class seqStack{public: seqStack(void); virtual ~seqStack(void);public: void push(T _data)...2018-10-17 21:40:49629
0
-
原创 线性表的链式存储结构 单链表(Singly Linked List) C++
节点定义:Node.h#ifndef __NODE_H__#define __NODE_H__template &amp;amp;lt;class T&amp;amp;gt;struct Node{ T data; Node&amp;amp;lt;T&amp;amp;gt; * next;};#endif单链表类定义:LinkedList.h#ifndef __LINKEDLIST_H__2018-09-28 22:55:10490
0
-
原创 线性表的顺序存储结构 顺序表(sequential list) C++
类定义SeqList.h#ifndef __SEQLIST_H__#define __SEQLIST_H__template&amp;amp;lt;class T&amp;amp;gt;class SeqList{public: SeqList(); SeqList(T *_data, int _length); virtual ~SeqList();public: int...2018-09-16 23:58:25442
0
-
原创 查找二维数组的鞍点
鞍点的定义为:鞍点元素是所在行中值最小的元素,是所在列中值最大的元素。要解决鞍点问题,我们可以对二维数组进行检索,找出每一行中有最小值的元素,然后找出该元素所在列中的最大元素,比较该列的最大元素的值与该元素的值。但是,必须考虑到,如果一个看似鞍点,但其所在行列却又元素大小与之相等,则这个“鞍点”不满足定义,所以它不是一个鞍点。综上,我们先判断行列最值,然后判断行列中是否有多个最值,如果有元素满足:既2017-12-08 00:15:323323
0
-
原创 编程从键盘输入一个正整数n,判断该数的奇偶性,若为奇数输出“odd”,若为偶数输出“even”
#include "stdio.h"int main(void){ int n = 0; printf("please input a number:"); scanf_s("%d", &n); if (0 == n % 2) printf("even\n"); else printf("odd\n"); return 0;2017-11-29 17:55:4729232
172
-
原创 图解栈分析Hanoi Tower(汉诺塔)程序
汉诺塔程序伪算法:将 n 个盘子从 A 塔移动到 C 塔 分解为以下步骤: 1、将 A 塔上 n-1 个盘子借助 C 塔先移动到 B 塔; 2、将 A 塔剩下的第 n 个盘子移动到 C 塔; 3、将 B 塔上的 n-1 个盘子借助 A 塔移动到 C 塔;以下是代码:#include "stdio.h"void move(char from, char target){ printf2017-12-26 21:03:354290
0
-
原创 算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
程序分析: 可以定义两个字符串,一个用来存放字符串,一个用来存储最长的单词。通过比较得到最长的单词,再通过元素下标来获取最长的单词。#include "stdio.h"#include "string.h"int main(void){ //定义两个数组,sentence储存字符串,word存储单词 char sentence[1024] = {}, word[64]2017-11-25 16:39:414410
1
-
原创 算法:从键盘循环输入一个整数,判断是否是素数\质数
程序分析: 1、质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 2、nn能被mm整除,则m≤n2m≤\frac{n}{2},所以只需要穷举m∈[2,n2]m∈[2, \frac{n}{2}]即可,若在穷举过程中出现了nn%m == 0的情况则n是质数,若mm能自加到m=n2m = \frac{n}{2}则n不是质数。#include "stdio.h"int main(void2017-11-21 13:25:0910937
0
-
原创 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
由题意我们可以设该数为x,加100后得到的完全平方数为y,再加168后得到的完全平方数为z,则有:2017-09-10 15:46:4019754
28