数据结构与算法
文章平均质量分 75
喵的波波鱼
爱生活,也爱技术!
展开
-
二叉树(0)——二叉树的实现与二叉树的遍历
0.二叉树的实现(C++)未完,待补充#include <iostream>#include<iostream>#include<queue>#include<stack>using namespace std;//二叉树结点的定义template <typename T>struct BinTreeNode{...原创 2018-11-13 18:32:36 · 186 阅读 · 1 评论 -
算法练习(3)——C++ STL练习(2)
题目1:反片语思路:由于有了上篇博客题目中的经验,遇到不区分大小写,那就在判断时用临时变量保存调用tolower()函数转变成小写形式的字符串1.可以写一个函数对每个单词标准化:全部转化为小写字母,然后再对字母排序2.用map统计标准化每个单词出现的次数,标准化之后题目中能通过字母重排的单词相同3.保存单词出现次数为1的原单词4.对保存的单词进行字典排序,然后打印出来...原创 2018-11-16 18:56:24 · 418 阅读 · 1 评论 -
算法练习(2)——C++ STL练习(1)
说明:题目节选自《算法竞赛入门经典》(第二版),仅为了练习使用,跟着书中手敲代码,并添加自己的理解,仅此记录,我始终相信,当你开始不懂许多东西的时候,跟着书中弄懂作者的写的代码的思路,照着敲出来,敲多了,明白许多原理了,还有你会为了看懂它,查很多资料,然后当自己面对新的问题,脑子就有的调用了备注:1.个人更喜欢C++,对于作者书中的沿用了C语言的部分,我会改成C++实现,如果涉及到效率问题,请...原创 2018-11-16 01:35:14 · 1794 阅读 · 0 评论 -
算法练习(4)——C++STL练习(3)
题目1:Unix ls 命令思路:1.接受用户输入,用数组保存用户输入的文件名2.计算输出的行数和列数3.对数组中的字符串进行排序4.按列输出,但这里我们不可能输出一列又回到开头去输出,所以真正代码的书写还是按行输出,但通过计算造成按列排序输出的“假象”代码实现:#include <iostream>#include <string>#...原创 2018-11-18 23:24:40 · 331 阅读 · 0 评论 -
算法练习(5)——数组(1)
此篇题目来自于《剑指offer第二版》P39——P481.数组中重复的数字输入: 数组长度 数组输出: 第一个找到的重复的数字思路:暴力思路:时间复杂度为O(n^2) ,空间复杂度为O(1)遍历数组,找每个元素在后续元素中是否有重复,有重复就输出 先排序再遍历思路:时间复杂度...原创 2019-02-20 09:45:10 · 203 阅读 · 0 评论 -
线性表(4)——栈——顺序栈、链式栈、共享栈
栈的基本知识1.顺序栈Stack.h#pragma once#ifndef STACK_H#define STACK_Htemplate <typename T>class Stack{public: //Stack数据类型表 typedef T Value_Type; typedef T& Value_Reference; typedef T...原创 2019-03-22 20:17:51 · 129 阅读 · 0 评论 -
线性表(1)——顺序表、单链表
1.顺序表(1)顺序表的特点:(2)顺序表与内置数组的区别:1)顺序表在数组的基础上封装了一些方便的操作 2)顺序表的创建是在堆上申请内存,而传统的直接声明的数组是在栈上申请内存(3)实现:Line_Table_ADT.h#pragma once //有的编译器实现的保证.h文件只被编译一次,但要是写跨平台的程序,还是用ifndef,endi...原创 2019-03-21 23:20:24 · 351 阅读 · 0 评论 -
线性表(2)——双链表、循环链表
1.双链表Line_Table_ADT.h#pragma once#ifndef LINE_TABLE_ADT_H#define LINE_TABLE_ADT_H//抽象基类template <typename T>class List{public: typedef T Value_Type; typedef T* Value_Pointer; ty...原创 2019-03-25 22:50:03 · 155 阅读 · 0 评论 -
线性表(5)——队列——循环队列、链式队列、双端队列
1.循环队列C++实现:Queue.h#pragma once#ifndef QUEUE_H#define QUEUE_Htemplate <typename T>class Queue{public: //Queue数据类型表 typedef T Value_Type; typedef T& Value_Reference; typedef ...原创 2019-03-25 20:12:56 · 280 阅读 · 0 评论 -
线性表(3)——哈希链表
C++实现:Key_Value_Pair.h#pragma once#ifndef Key_Value_Pair_H#define Key_Value_Pair_Htemplate <typename Key, typename Value>class Key_Value_Pair{public: typedef Key Key_Type; typedef ...原创 2019-03-26 17:50:47 · 1541 阅读 · 0 评论 -
数据结构与算法(3)——数组(2)——动态数组、稀疏数组
目录1.动态数组——可变长数组1.1 动态数组介绍1.2 自己实现一个可变长数组(Java版)1.3 Java中的动态数组2.稀疏数组(1)案例引入(2)稀疏数组的基本介绍(3)稀疏数组的应用实例(4)代码实现1.动态数组——可变长数组1.1 动态数组介绍动态数组和数组的区别:动态数组的长度会随着元素的增加,数组的长度会动态改变,而数组的长度是固...原创 2019-08-21 17:42:59 · 240 阅读 · 0 评论 -
字符串(1)——(1)判断一个二叉树是否为了另一个二叉树子树问题;(2)判断两个字符串是否互为变形词;(3)判断两个字符串是否互为旋转词;
此篇题目1,2,3来自于牛客网左大神的《直通BAT算法精讲课》,题目4来自于《剑指offer第二版》P51题目1:判断一个二叉树是否为了另一个二叉树子树问题解题思路:1.普通解法:二叉树遍历+匹配问题 时间复杂度为:O(N*M),空间复杂度:O(1) 考察t1中以每个节点为头的二叉树是否与t2一致最差情况:t1中每个节点的所形成的子树都要与t2中节点比较至多M次(...原创 2019-02-20 09:42:50 · 219 阅读 · 0 评论 -
数据结构和算法(1)——算法分析的基本必备理论
目录1.数据结构和算法概述(1)线性结构(2)非线性结构2.简单示例介绍分析面试考察点3.算法分析之时间复杂度(1)基本概念(2)近似记法(3)P与NP(4)主项定理1.数据结构和算法概述什么是数据结构? 数据结构是一种特定的计算机存储、组织数据的方式,其宗旨是使计算机能够高效的使用数据 什么是算法? 算法:有限时间内解决问题的一系列清晰指令...原创 2019-08-17 21:21:42 · 750 阅读 · 0 评论 -
数据结构与算法(2)——数组(1)——Java的内置数组、内置数组的几个应用案例
目录1.Java的内置数组1.1 概念和特点1.2 初始化(1)动态初始化(指定长度)(2)静态初始化(指定内容)1.3 访问数组中的元素1.4 内存图分析(1)只有一个数组的内存图(2)两个数组的内存图(3)两个引用指向同一个数组的内存图(4)创建引用类型数组的内存图1.5 数组中容易发生的两大异常(1)数组索引越界异常(2)空指针异常...原创 2019-08-18 17:21:11 · 700 阅读 · 0 评论 -
数据结构和算法——排序算法(2)——基于比较的O(n^2)的排序算法(2)——选择排序、插入排序
目录1.选择排序1.1 基本思想1.2 图解原理:1.3 Java代码实现1.4 性能分析2.插入排序2.1 基本思想2.2 图解原理2.3 代码实现2.4 优化——折半插入排序2.5性能测试(1)直接插入排序和选择排序性能测试代码:(输入数据为随机数据)(2)直接插入排序和折半插入排序性能测试代码:(输入数据为随机数据)3.三种基于比较的...原创 2019-09-05 20:06:21 · 513 阅读 · 0 评论 -
数据结构和算法——排序算法(1)——Java比较器、基于比较的O(n^2)的排序算法(1)——冒泡排序
目录1.Java比较器(1)Comparable(2)Comparator(3)Comparable和Comparator使用对比2.后面所有排序算法类继承的父类3.冒泡排序3.1 基本思想3.2 图解原理:3.3 Java代码实现3.4冒泡排序的优化(1)优化切入点发现(2)优化实现3.5性能分析1.Java比较器Java中的对象只...原创 2019-09-04 08:43:47 · 336 阅读 · 1 评论 -
数据结构与算法——排序算法(3)——希尔排序
目录1.基本思想1.1 插入排序的问题分析1.2 希尔排序基本思想2.图解原理3.代码实现4.性能分析5.希尔排序的稳定性分析1.基本思想1.1 插入排序的问题分析比如数组arr={2,3,4,5,6,1},这时需要插入的数为1(最小),这样的过程是:{2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,...原创 2019-09-06 11:21:46 · 219 阅读 · 0 评论 -
数据结构与算法——排序算法(4)——归并排序
目录1.基本思想2.图解原理3.代码实现3.1 递归实现(自定向下的实现)3.2 迭代实现4.性能分析1.基本思想归并排序是利用分治策略实现的 分阶段:将问题分成一些小的问题递归求解 治阶段:将分阶段得到的子问题的解合并在一起 使用分治策略的三个步骤分析归并排序: 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列(只是分解,并未做任何处理...原创 2019-09-06 23:19:23 · 401 阅读 · 0 评论 -
数据结构与算法——排序算法(5)——快速排序
目录1.基本思想1.1 基本思想1.2 使用分治策略的三个步骤分析快速排序1.3归并排序与快速排序比较2.图解原理3.代码实现3.1 实现方式1:选取中间值作为基准值3.2 实现方式2:选取最右边的值作为基准值4.性能分析1.基本思想1.1 基本思想快速排序是基于分治策略的一种排序 基本思想 1.基准:先从数列中取出一个数作为基准数。 2....原创 2019-09-07 10:56:58 · 366 阅读 · 0 评论 -
数据结构与算法——动态规划(1)——动态规划详解
目录1.基本介绍1.1 基本思想1.2 与分治法做比较1.3 动态规划求解问题2.经典案例2.10-1背包问题2.1.12.1.2 分析2.1.3 列表2.1.4 公式2.1.5边界值考虑2.1.6 代码实现3.我自己总结的解决动态规划题目的步骤1.基本介绍1.1 基本思想动态规划(Dynamic Programming),又叫表...原创 2019-09-09 12:59:58 · 427 阅读 · 0 评论 -
数据结构与算法——动态规划(2)——动态规划题目(1)——一维动态规划(1)
声明:以下练习题目均来自于https://leetcode-cn.com/目录0.一维动态规划1.爬楼梯1.1 问题描述1.2 分析1.3 列表1.4 公式1.5 代码实现2.打家劫舍2.1 问题描述2.2 分析2.3 列表2.4 公式2.5 代码实现2.6 优化3.打家劫舍||3.1 问题描述3.2 分析3.3 列表...原创 2019-09-08 16:45:17 · 338 阅读 · 0 评论