Data Structure and Algorithm
Victor _Lv
个人微信公众号:维特小站(VictorSite)
展开
-
构建二叉树并进行深度遍历(使用递归方式+非递归方式)
话不多说,直接上代码,注释也比较详尽。package tree;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * @Description:构建二叉树并进行深度遍历(使用递归方式+非递归方式) * @author: Victor Lv * @date: 2020/12/24 10:46 */public class BinarySearchTree { private原创 2020-12-24 11:13:04 · 354 阅读 · 0 评论 -
什么是二叉树
二叉树:**定义:**A binary tree is either empty, or it consists of a node called the root together with two binary trees called the left subtree and the right subtree of the root. 二叉树的深度:从根数到叶子,层数即深度。只有一个根节原创 2016-09-06 22:30:41 · 1258 阅读 · 0 评论 -
合并有序链表C++
/* Author: Victor LV Date: 2016-9-1 11:20 Description: C++ list merge(sort)*//*** C++:将两个升序排列的链表合并成一个升序排列的链表(不开辟新的链表,直接将原链表重新组合) * 输入:两个list的头指针* 返回:新的list头指针 */ ListNode* find(ListNod原创 2016-09-06 22:29:54 · 674 阅读 · 0 评论 -
判断单链表是否存在回环
/* Author: Victor LV Date: 2016-9-6 10:14 Description: 判断单链表是否有回环C++ *//*** C++:判断单链表是否存在回环 * 输入:list的头指针* 返回:bool:true表示有回环,false表示无 */ /**解题思想: *这里也是用到两个指针。如果一个链表中有环,*也就是说用一个指针去遍历,原创 2016-09-06 22:21:35 · 1662 阅读 · 0 评论 -
寻找链表的倒数第K个节点
输入一个链表,输出该链表的倒数第k个节点主要思路就是使用两个指针,先让前面的指针走到正向第k个结点,这样前后两个指针的距离差是k-1,之后前后两个指针一起向前走,前面的指针走到最后一个结点时,后面指针所指结点就是倒数第k个结点。/*** C++:寻找链表的倒数第k个元节点* 输入:list头指针, k* 返回:list倒数第k个节点 */ ListNode* find(ListNode *p原创 2016-09-06 22:33:52 · 489 阅读 · 0 评论 -
STL链表反向输出实例
C++ list反向输出/反转实例 给定一个单向链表,从尾到头输出其每个值。 代码: #include <iostream>#include "stdio.h"#include <list>#include <stack>using namespace std;//从尾到头输出list--1.递归方法 void list_reverse1(list<int> &mylist, l原创 2016-08-30 23:34:43 · 1377 阅读 · 0 评论 -
哈希表
![矩阵数组的两种顺序表达:行优先和列优先] Indexing Rectangular Tables:矩阵表i: 0~m j: 0~n (1) index function: Entry (i,j) in arectangular tablegoes toposition ni + j in asequential array. 元素(i,j)所在位置为ni + j (2) access原创 2016-09-06 22:42:08 · 401 阅读 · 0 评论 -
关于递归调用的深度
题目源自牛客网:1.对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是()正确答案: A 你的答案: A (正确)每次分区后,先处理较短的部分每次分区后,先处理较长的部分与算法每次分区后的处理顺序无关以上三者都不对来看一个别人的答案:“考虑一种极端情况,如果每次确定pi原创 2016-09-23 17:26:02 · 5330 阅读 · 0 评论 -
链表反转C++
从头到尾遍历原链表,每遍历一个结点,将其摘下放在新链表的最前端。注意链表为空和只有一个结点的情况。时间复杂度为O(n)。参考代码如下: #include <cstdio>//链表反转ListNode *list_invert(ListNode *phead){ if(phead == NULL) return NULL; ListNode *ptemp1 = p原创 2016-09-07 22:58:29 · 567 阅读 · 0 评论 -
合并两个有序单链表C++
/* Author: Victor LV Date: 2016-9-1 11:20 Description: C++ list merge(sort)*//*** C++:将两个升序排列的链表合并成一个升序排列的链表(不开辟新的链表,直接将原链表重新组合) * 输入:两个list的头指针* 返回:新的list头指针 * 注意别让链表断了找不到下一个节点,在切断原指向原创 2016-09-07 23:02:39 · 3835 阅读 · 0 评论 -
构建二叉树并求其深度
/*题目描述:输入:第一行为整数n(n >= 2),表示二叉树节点总数后面带n-1行,每行为整数a和整数b的输入格式,a表示父亲节点,b表示a的一个子节点输出:二叉树的深度示例输入:50 10 21 31 4输出:3*/#include #include using namespace std;//节点数据结构class Node{public:原创 2016-09-24 00:35:08 · 3021 阅读 · 0 评论 -
动态规划之最少硬币凑钱问题
#include using namespace std;/**题目描述:如果我们有面值为1元、3元和5元的硬币若干枚,最少要用多少枚硬币凑够n元?*//**解题分析:(1)要算n元要多少个凑完[f(n)],那我分类嘛: 1.首先拿一个1元的硬币,所以这个分类所需最少硬币数为f(n-1) + 1 2.首先拿一个3元的硬币,这个分类所需最少硬币数为f(n-3) + 1原创 2016-09-30 23:12:42 · 2840 阅读 · 0 评论 -
哈希表和HashMap内部实现原理
点击打开链接转载 2016-08-11 22:58:32 · 701 阅读 · 0 评论 -
顺序存储(数组)和链式存储(指针)的比较以及线性表小解义
线性表可以理解为区别于非线性的数据结构(如树[二叉树]、图)来说的常见的链表(单链表、循环链表、双链表)就是线性表。另外,栈或队列就是一种线性表。1.顺序存储ArrayList2.链式存储LinkedList两种存储的特点比较:原创 2016-08-16 22:22:05 · 824 阅读 · 0 评论 -
C++数据结构之Stack(栈)
stack,栈,是好比堆积木似的数据结构,从上之下堆积,取出时按“LIFO”-last int first out后进先出的规则。栈一般为线程所独有,也就是每个线程有其自有的栈,与heap堆一般为共有的不同(heap为进程所用,stack为线程所用?)。stack主要有四种操作:empty判断栈是否为空;pop将栈顶的元素清除;top显示栈顶的元素(不是取走);push压栈,向栈内增加一个元素原创 2015-08-21 16:46:25 · 1502 阅读 · 0 评论 -
C++数据结构之Queue(队列)
Queue,队列,和我们日常生活中的队列是同样的规则,“先进先出”,从尾入,从首出。Queue,主要有三种基本操作,append(添加元素至队尾);serve(队首元素出列);retrieve(查看队首元素)。有外加的一些操作如 full(队列是否已满),serve_and_retrieve(查看队首元素同时去除)等等。代码(在eclipse运行通过):.h头文件/*原创 2015-08-23 11:49:41 · 1193 阅读 · 0 评论 -
C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从队首指到队尾(front -> Front_Node -> …… -> rear -> Rear_Node).代码:Node.h文件/* * Node.h * * Create原创 2015-09-10 23:25:47 · 1340 阅读 · 0 评论 -
C++数据结构之List--线性实现
List(表)类似于队列,不同于队列的是,list可以随机读取/修改/插入某一position,通过position这一位置信息就可以直接修改相应位置的元素。实现方式和队列的类似,多了个position的参数。注意,因为list的定义使用了模板template,所以其定义和实现需要在同一个文件下,当然,也有其他方式实现二者分离,但比较复杂,网上有方法。代码:List.cpp原创 2015-09-13 21:31:12 · 1399 阅读 · 0 评论 -
更高效的Fibonacci求解
两种思想三种方式实现斐波那序列求解:// Fast_Fibonacci.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include //support for clock()using namespace std;int Fib1(int n)//传统递归方式实现--有每次重复计算值的缺点{ if (n <= 0)原创 2016-05-13 15:52:38 · 824 阅读 · 0 评论 -
各种排序算法性能比较
截图自《数据结构与算法:Java语言描述》:原创 2016-08-16 22:16:02 · 664 阅读 · 0 评论 -
C++数据结构之Linked Stack(链式栈)
上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦。连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带指针的自定义结构(Node)来存储栈元素,因此可以在后期持续增加栈元素。链式栈的栈元素存储于自定义的数据结构--Node中,每一个Node均包含两个属性,一个是它里面的元素(栈元素),一个是指向原创 2015-09-09 23:03:34 · 1181 阅读 · 0 评论