数据结构及算法分析
lhj_sjtu
爱科研,爱技术,爱生活的工科女,但也是萌妹子!!!
展开
-
数据结构学习笔记2
第二章 算法分析 运行时间计算: 上面是一个比较具体的计算方法,但是实际中并不需要这么繁琐,本书给出了一般的法则。 一般法则: 法则1:For循环 一次For循环的运行时间至多是该for循环内语句(包括测试)的运行时间乘以迭代的次数。 法则2:嵌套的For循环 从里向外分析这些循环。在一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以原创 2017-08-11 16:52:20 · 321 阅读 · 0 评论 -
面试中需要掌握的排序算法问题
最近被各种电话面试折磨了一番,决定记录一下这些面试官们问到的问题。问题一:排序算法有很多,具体分为哪两大类?问题二:针对快速排序,说一下它的思想以及时间复杂度和空间复杂度。问题三:说一下堆排序。问题四:冒泡排序的时间复杂度和空间复杂度各是多少?这些解法可以参考https://www.cnblogs.com/zhaoshuai1215/p/3448154.html原创 2018-01-17 15:52:27 · 295 阅读 · 0 评论 -
二分查找(非递归算法和递归算法)
非递归算法:package mytest;public class test { public static int BinarySearch(int low,int high,int[]arr,int x){ int loc=-1; while(low<=high){ int mid=(low+high)/2; if(x==arr[mid]){loc=mid;br...原创 2018-03-19 11:09:20 · 1820 阅读 · 0 评论 -
怎么判断一个数是否是素数
package mytest;import java.util.Scanner;public class test { public static boolean IsPrimeNumber(int x){ for(int i =2;i<=Math.sqrt(x);i++){ if (x%i==0) return true; } return false; ...原创 2018-03-19 14:48:27 · 365 阅读 · 0 评论 -
将一个正整数转化为二进制并用字符串表示输出
public static void main(String[]args){ String s=""; int N=198; while(N>0){ s=String.valueOf(N%2)+s; N=N/2; } System.out.println(s); }原创 2018-03-19 17:52:18 · 5096 阅读 · 0 评论 -
二叉树相关操作(Java实现)
package myTest;import java.util.ArrayList;//二叉树的节点类,你可以将它写成内部类的形式class BTreeNode { int data; BTreeNode Left; BTreeNode Right; public BTreeNode(int data) { this.data=data; ...原创 2018-03-29 17:49:07 · 167 阅读 · 0 评论 -
字符串反转
1. 使用Array.Reverse方法对于字符串反转,我们可以使用.NET类库自带的Array.Reverse方法public static string ReverseByArray(string original){char[] c = original.ToCharArray();Array.Reverse(c);return new string(c);}2. 使用字符缓存在面试或笔试中...转载 2018-03-27 16:35:02 · 265 阅读 · 0 评论 -
Java链表
package myTest;public class Node{ int data=-1; Node next; Node(int data){ this.data=data; } Node(){ } public static Node BuildmyLinkarr(int []arr,boolean HasHeadNode){ if (arr.lengt...原创 2018-03-25 19:48:25 · 438 阅读 · 1 评论 -
二叉树的最小深度(递归实现,java)
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { publi...原创 2018-04-05 12:38:35 · 1368 阅读 · 0 评论 -
二叉树遍历非递归方式--前序和后序的统一形式
网址https://my.oschina.net/husthang/blog/852982 上写的很详细了,如果想验证代码对不对,可以用它里面给出的leetcode链接测试一下。DFS非递归实现前序和后序遍历前序遍历和后序遍历归为一类,所用思想基本一模一样:前序遍历的步骤为对root进行异常处理将root压入栈while循环遍历,终止条件为栈为空,所有元素均已处理完从栈顶取元素读,取并存入结果将取...转载 2018-05-03 22:23:23 · 242 阅读 · 0 评论 -
冒泡排序--C++实现
int Bubble_Partition(int arr[],int low,int high){ for(int i=low;i<high;i++) {if (arr[i]>=arr[i+1]) swap(arr[i],arr[i+1]); } return high-1;}void BubbleSort(int arr[],int low,int high){i原创 2018-01-17 12:14:10 · 195 阅读 · 0 评论 -
(排序算法总结)快速排序c++实现--将未排序部分的最后一个数作为主元
#include using namespace std;int Partition(int arr[],int low,int high){ int x=arr[high]; int mid=low-1; for(int i=low;i<high;i++) { if(arr[i]<x) {mid++; swap(arr[i],arr[mid]);原创 2018-01-16 19:34:20 · 508 阅读 · 0 评论 -
选择排序-C++实现方法及可视化
//选择排序int Select_Partition(int arr[],int low,int high){ int loc=low;//储存最小元素的下标位置 for(int i=low+1;i<=high;i++) {if (arr[i]<arr[loc]) loc=i; } swap(arr[loc],arr[low]); return原创 2018-01-17 17:02:00 · 1280 阅读 · 0 评论 -
数据结构学习笔记1
作为一名程序员,就要进行程序员的青春修炼。所以决定将没有系统学过的数据结构和算法分析好好学一学,尤其是趁现在还是学生时期,对将来的工作也会有很大的帮助。 关于这本书如何学习我是在这个网站看到的,下面有很多精彩的评论,还包括该书的下载链接: 网页链接: 点击打开链接 《数据结构与算法分析--C语言描述》书籍下载链接:链接: https://pan.baidu.com/s/1o原创 2017-08-10 15:55:18 · 400 阅读 · 0 评论 -
数据结构学习笔记4
对算法的复杂度进行分析: 通过观察与N的二次方,N的三次方等的比值,可以确定复杂度是与哪一个成正比,这个示例中最后一列是最满足要求的,随着N越来越大,比值趋于不变。第三章 表、栈和队列 本章讨论最简单和最基本的三种数据结构,其中栈在程序中总是要间接的用到。 3.1抽象数据类型(Abstract Data Type) 简而言之,抽象数据类型是一些操作的集原创 2017-08-22 22:02:26 · 229 阅读 · 0 评论 -
数据结构学习笔记3
具有对数特点的三个例子:一、对分查找 给定一个整数X和整数A0,A1,.....AN-1,后者已经预先排序并在内存中,求使得Ai=X的下标i.如果Ai不在数据中,则返回i=-1. 二、欧几里得算法 计算最大公约数的欧几里得算法 这个有一个经过推导得到的结论,若M%N=REF,则REF至多是M的一半。 证明过程:若N 若原创 2017-08-18 21:50:08 · 352 阅读 · 0 评论 -
数据结构学习笔记5
本篇博文主要是针对线性表展开。线性表的定义:线性表是由n(n>=0)个元素的一个有限序列。*NOTE:线性表中的数据元素可以是一个数,或一个符号,也可以是一个复杂类型,但同一线性表中的数据元素必须具有相同的属性。线性表的逻辑结构:线性表的逻辑结构是线性结构,元素之间是一对一的关系,即除表头元素以外,每个元素有且只有一个直接前驱,除表尾元素以外,每个元素有且只有一个直接后继,当表中只有一原创 2017-09-24 16:56:50 · 179 阅读 · 0 评论 -
数据结构学习笔记9--栈和队列的顺序存储结构
栈和队列的相同点和不同点:相同点:栈和队列是两种重要的数据结构,也是两种特殊的线性表结构。从数据的逻辑角度看,栈和队列是线性表;从操作的角度来看,栈和队列的基本操作是线性表基本操作的子集,是操作受限制的线性表。不同点:栈是限定仅在表尾进行插入删除的线性表,它的存其特征是后进先出;队列是限定只允许在表的一端进行插入,而在另一端进行删除元素的线性表,它的存取特征是先进先出。栈的顺序存储表示原创 2017-10-18 19:57:52 · 4594 阅读 · 0 评论 -
数据结构学习笔记6--线性表易错知识点总结
最近通过刷题,对线性表有了更为深刻的了解,为了防止自己忘记,决定整理一下所碰到的知识点,留待复习回顾。重要概念:1.结点:包含了数据域和指针域,其中指针域用来存储下一个节点的地址。2.头指针和头结点有什么联系和区别? 头指针:指向第一个结点的指针为头指针。 头结点:当有头结点时,该结点的数据域可以不存储任何信息,头结点的指针域指向第一个结点。 在有头结点的情况下,头指原创 2017-10-11 21:17:59 · 3588 阅读 · 0 评论 -
数据结构学习笔记7--c语言建立一个链表(已测正确无误)
#include #include typedef struct linknode{ int data; struct linknode *next;//struct linknode是一个结构体类型名,需要作为整理而使用}node;// typed struct A B;表示为结构体struct A起一个别名 B. 那么在后面创建一个变量x的时候可以用struct A x;或者B原创 2017-10-12 15:06:24 · 420 阅读 · 0 评论 -
数据结构学习笔记8--n个元素进栈,共有多少种出栈顺序?
n个元素进栈,共有多少种出栈顺序?转载自http://www.cnblogs.com/jiayouwyhit/p/3222973.html1.基于栈的问题分析我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1 //即 1转载 2017-10-13 21:38:24 · 982 阅读 · 0 评论 -
数据结构学习笔记10--栈和队列中的一些重点易错知识点
1.链栈中为何不设置头结点?因为栈是后进先出的数据结构,我们不可能直接就对栈底元素进行操作,要想操作栈底元素,必须得先依次让非栈底元素出栈。线性表和队列如果用链表在插入删除时有头部和其他部位的操作差别,需要用头结点来统一操作。而栈只在栈顶插入删除,所以不必要用头结点。( 链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更原创 2017-11-09 21:09:14 · 2403 阅读 · 0 评论 -
数据结构学习笔记11--树与二叉树
1.树的定义: 树是n个结点的有限集。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根(Root)的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树。 每棵子树的根节点有且仅有一个直接前驱,但可以有0个或多个直接后继。 由此可以看到,树的定义是一个递归的定义,即树的定义中又用到了树的定原创 2017-11-11 14:36:09 · 288 阅读 · 0 评论 -
猫狗队列题目
源码下载链接: https://github.com/huijuanl/AlgorithmLearning.git (目录:/src/main/java/CatDogPackage/)https://github.com/huijuanl/AlgorithmLearning.githttps://github.com/huijuanl/AlgorithmLearning.gitpackage ...原创 2018-06-23 16:22:49 · 485 阅读 · 0 评论