数据结构与算法
文章平均质量分 81
vellerzheng
这个作者很懒,什么都没留下…
展开
-
矩阵martix类模板
参考数据结构与算法分析---C++描述,扩展实现矩阵类模板。matrix.h#pragma once#include template class Matrix {public: Matrix(int rows, int cols) :array(rows) { for (auto & thisRow : array) thisRow.resize(co原创 2017-04-27 16:30:57 · 1435 阅读 · 0 评论 -
数据结构与算法分析 P86 Stack 栈的实现
链表实现Stackstack.h #pragma once#include #include struct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;typedef int ElementType;bool IsEmpty(Stack S);Stack CreateStack();原创 2017-05-16 10:12:04 · 295 阅读 · 0 评论 -
数据结构与算法分析 c++11 练习3.21 检测平衡符号
练习3.18】用下列语言编写检测平衡符号的程序a.Pascal ( begin/end, ( ), [ ], { } )。b.C语言( /* */, ( ), [ ], { })。c.解释如何打印出错信息用c++实现,思路差不多,按书上的思路,碰见平衡符号起始标准压入栈中,碰见平衡符号结束标志弹出栈,如果弹出的不匹配,中断循环提前跳出报错“不原创 2017-05-16 13:52:34 · 1820 阅读 · 0 评论 -
数据结构与算法分析 c++11 练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算
练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算polynome.h#pragma once#include #include #include //判断字符类型需要的头文件#include #include #include class Polynome {public: Polynome() = default; Polyno原创 2017-05-22 20:41:09 · 545 阅读 · 0 评论 -
数据结构与算法分析 c++11 查找二叉树 BinarySearchTree
查找二叉树的实现,参考第四版教材P109页。binarySearchTree.h 文件:#pragma once#include template class BinarySearchTree{public: BinarySearchTree():root(nullptr){}; BinarySearchTree(const BinarySearchTree & rhs)原创 2017-06-20 14:15:57 · 397 阅读 · 0 评论 -
数据结构与算法分析 c++ 平衡二叉树 AvlTree
一棵AVL 树(AVL tree) 是其每个节点的左子树和又子树的高度最多差1的二叉查找树。 可以通过单旋转和双旋转来达到平衡条件。 这个实现起来有一定难度,参考书上和网上的程序实现。AvlNode.h#pragma once#include #include #define LH +1 //左高 #define EH 0 //等高 #define RH -1 /原创 2017-06-21 19:20:12 · 574 阅读 · 0 评论 -
数据结构与算法分析 c++11 AVL tree 另一种实现方法
AVL tree 的另一种实现方法,这种AVL tree 是在插入删除过程中分别考虑左右子树的平衡,调用左右调整规则“leftBalance(t) 和 rightBalance(t)”,并及时调整。 第四版书上P125页介绍的是放弃平衡条件,允许有任意的深度,但是在每次操作之后使用一个调整规则(P125 调整规则void balance(AvlNode * &t))调整。AVLTre原创 2017-06-21 20:32:06 · 352 阅读 · 0 评论 -
数据结构与算法分析 c++11 伸展树(splay tree)
一、什么是伸展树(splay tree)伸展树(splay tree)是特殊的二叉查找树,它通过将访问过的节点旋转移到根节点处,来降低再次访问的时间。它保证从空树开始任意连续M次对树的操作最多花费O(MlogN)时间。 普通AVL树的旋转和伸展树的旋转不同之处: AVL树的旋转操作目的是缩小左右子树的高度差,它是全局调控即目的是缩小整棵树的原创 2017-06-22 14:30:17 · 973 阅读 · 0 评论 -
数据结构与算法分析 c++11 红黑树 (Red black tree)
红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树,没有一条路径长度是其他路径长度的两倍。没有AVL树那样要求平衡条件为路径长度相差正负一这种严格平衡。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。红黑树的高最多是2log(N+1)。除了具备该特性之外,红黑树还包括许多原创 2017-06-23 15:18:57 · 467 阅读 · 0 评论 -
数据结构与算法分析 C++ 查找等长单词且只有一个元素不同的所有单词
第四版map set 实现章节(P143) 书中提到的 :编写一个程序来找出通过单个字母的替换可以变成至少15个其他的单词的单词。如: 单词wine 可以变成dine、fine、line、nine、pine、或vine。单词wine 可以变成wind、wing、wink、wins。#include #include #include #include #include原创 2017-06-23 20:30:02 · 454 阅读 · 0 评论 -
散列(hashing)
散列散列表的实现常常叫做散列。散列是一直用于以常数平均时间执行插入,删除和查找的技术。一种简单的散列函数。int hash( const string & key, int tableSize){int hashVal = 0;for ( char ch : key ) hashVal += ch; /原创 2017-10-23 20:03:04 · 311 阅读 · 0 评论 -
数据结构与算法分析 2.14 考虑下列算法(Horner法则)
2.14 考虑下列算法(Horner法则)...// P60_2.14.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;/** if f(x) = 4*x^4+8*x^3+x+2, * then a={4,8,0,1,2};*/原创 2017-05-01 13:09:06 · 1123 阅读 · 0 评论 -
数据结构与算法分析 2.20 编写一个程序来确定正整数N 是否是素数
2.20a. 编写一个程序来确定正整数N是否是素数。b. 你的程序在最坏的情形下的运行时间是多少(用N表示)?c. 令B等于N的二进制表示法中的位数。B的值是多少?d. 你的程序在最坏的情形下的运行时间是多少(用B表示)?e. 比较确定一个20(二进制)位的数是否是素数和确定一个40(二进制)位的树是否是素数的运行时间。f. 用N或B给出运行时间更合原创 2017-05-01 13:47:46 · 2070 阅读 · 0 评论 -
数据结构与算法分析 c++11 练习3.6 JosePhus 问题(Josephus problem)
练习 3.6 JosePhus 问题(Josephus problem)是下面的游戏:N个人编号1~N,围坐成一个圆圈。从1号人开始传递一个热土豆。经过M次传递后拿着热土豆的人被清除离座,围坐的圆圈锁紧,由坐在后面的人拿起热土豆继续进行游戏。最后剩下的人获胜。因此,如果M=0和N=5,则游戏人依序被清除,5号游戏人获胜。如果M=1 和N=5,那么被清除的人的顺序是2,4,1,5.a. 编原创 2017-05-13 15:40:44 · 1328 阅读 · 0 评论 -
数据结构与算法分析 练习1.13 设计一个类模板Collection
1.14 设计一个类模板Collection,以存储(在一个数组中的)Object 对象的集合,以及该集合的当前大小。提供public 函数isEmpty 、makeEmpty、insert、remove以及contains. contains(x) 返回true, 当且仅当在该集合中存在等于x 的Object。#pragma once#include #include templa原创 2017-05-01 12:56:17 · 863 阅读 · 0 评论 -
数据结构与算法分析 2.17 给出有效的算法(及其运行时间分析)
2.17 给出有效的算法(及其运行时间分析) 来:a. 找出最小子序列和。b. 找出最小的正子序列和。c. 找出最大子序列乘积。#include #include #include using namespace std;/** 最大子序列 ,复杂度: O(N^3) */int maxSubSum1(const vector & a){ int maxSum =原创 2017-05-01 13:29:16 · 1591 阅读 · 1 评论 -
数据结构与算法分析 2.23 不用递归,写出快速求幂的程序
2.23 不用递归,写出快速求幂的程序书中递归法示例double Pow1(double x, unsigned int n){ if (n == 0) return 1; if (n == 1) return x; if (n & 1 == true) // 如果n是奇数原创 2017-05-01 14:17:15 · 1525 阅读 · 0 评论 -
数据结构与算法分析 c++11 题2.26找主元素
题目描述:大小为N的数组A,其主要元素就是一个出现次数超过N/2的元素(从而这样的元素只有一个或者不存在) . 例如, 数组3, 3, 4, 2, 4, 4, 2, 4, 4有一个主要元素4, 而数组 3, 3, 4, 2, 4, 4, 2, 4 没有主要元素. 如果没有主要元素, 那么你的程序应该指出来. 下面是求解该问题的一个算法原创 2017-05-02 21:11:56 · 1419 阅读 · 0 评论 -
数据结构与算法分析 c++11 题2.27 找K是否在N*N 矩阵中
题目: 输入是一个N*N的数字矩阵并且已读入内存,每一行均从左到右递增,每一列从上到下递增,给出一个算法决定数m是否在该矩阵中解析:从矩阵的右上角的元素开始,若m小于此元素,则向左移动到下一个元素,若m大于此元素,则向下移动,直到寻找到此元素。#include #include using namespace std;templateint searchWor原创 2017-05-02 21:54:56 · 319 阅读 · 0 评论 -
数据结构与算法分析 c++ P75 Vector 实现
按书中的方式,实现一下简单的Vector ,加深理解。#pragma once#include template class Vector {public : explicit Vector(int initSize = 0) : theSize(initSize),theCapacity(initSize+SPARE_CAPACITY) { } Vector(const Vec原创 2017-05-03 19:48:40 · 280 阅读 · 0 评论 -
数据结构与算法分析 c++11 List实现
在设计时,需要以下四个类:1. List 类本身,它包含连接到链表两端的链、表的大小,以及一些方法。2. Node 类,它是一个私有的内嵌类。一个节点包含数据和指向前后两个节点的两个指针,以及一些适当的构造函数。3.const_iterator 类,它抽象了位置的概念,而且是一个共有的内嵌类,该const_iterator 存储一个指向“当前”节点的指针,并提供基本迭代器操作的实现,所原创 2017-05-07 14:30:30 · 1275 阅读 · 0 评论 -
数据结构与算法分析 c++11 题3.1 由一个链表元素指定另一个链表对应位置的元素输出
练习 3.1 给定一个表L和另一个表P,他们包含以升序排列的整数。操作printLots(L,p)将打印L中那些由P所指定的位置上的元素。例如,如果P=1,3,4,6,那么L中位于第1个,第3个,第4个和第6个位置上的元素就被打印出来。写出过程printLots(L,P).只可使用共有型STL 容器操作。该过程的运行时间是多少?#include #include #in原创 2017-05-09 21:19:11 · 677 阅读 · 0 评论 -
数据结构与算法分析 c++11 练习3.2 通过只调整链(而不是数据)来交换两个相邻的元素
练习3.2 通过只调整链(而不是数据)来交换两个相邻的元素,分别使用a. 单链表。b. 双链表。singlyList.h#pragma once#include struct ListNode { int value; ListNode * pNext;};void addListNode(ListNode * & p, int v) { if (p原创 2017-05-10 13:35:25 · 3153 阅读 · 0 评论 -
数据结构与算法分析 c++11 练习3.4 3.5 给定两个已排序的表L1和L2,求交集和并集
这个小问题没怎么考虑效率,用List标准库的函数实现下吧。#include #include using namespace std; void printList(list t){ auto itr = t.begin(); while (itr!=t.end()) { cout << *itr++<<" "; } cout << endl;原创 2017-05-10 15:56:20 · 1228 阅读 · 0 评论 -
数据结构与算法分析 c++ 排序
排序 外部排序不能在主存中完成而必须在磁盘或磁带上完成的排序为外部排序 内部排序 内部排序是数据记录在内存中进行排序。 几种常用的内部排序:冒泡排序,简单选择排序,直接插入排序,希尔排序,快速排序,归并排序,堆排序,基数排序。 下面将从算法思想, 时间空间复杂度和算法例程来归纳一下这八中排序:冒原创 2017-11-28 16:07:57 · 265 阅读 · 0 评论