====数据结构的学习====
有梦就不怕痛
这个作者很懒,什么都没留下…
展开
-
same-tree java
题目描述Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value./**...原创 2019-07-13 23:28:35 · 184 阅读 · 0 评论 -
归并排序
/** * 归并排序:其本质的思想是,一个长度为n的数组,它是无序的,但如果n=1,那么这个数组就是有序的。 * 归并排序的算法:先将一个长度为n的无序的数组拆分成n个数组,每一个数组的大小是1, * 那么每一个数组就是有序的,然后让数组两两合并,每两个数组合成一个数组,就是一个有序的数组, * 最后就变成了一个有序的数组了。我感觉就是拆了合。 * */public static voi...原创 2018-06-06 14:22:02 · 155 阅读 · 0 评论 -
冒泡排序
/** * 冒泡排序:每相邻的数进行比较,把较大的放在右边 * * */ public static void bubbleSort(int[] array) { int m = array.length-2; boolean flag=true; while(m>0&&flag) { // 如果没有发生交换,那就是排好序了 fl...原创 2018-06-05 14:35:36 · 135 阅读 · 0 评论 -
中缀到后缀的转换
原理:1.从左到右的读取中缀式。 2. 准备一个符号栈,从栈底到栈顶优先级是从小到大。当压入的操作符小于栈顶的操作符就出栈,知道碰到栈顶的操作符小于当前压入栈的操作符或者到达栈底,进行入栈操作。当压入的操作符优先级大于栈顶操作符的优先级,那就直接入栈就行了。时刻要记得创建的这个符号栈优先级是从小到大(从栈顶到栈顶) 3. 左括号的优先级是最高的,如果栈顶的操作符...原创 2018-03-27 20:51:06 · 514 阅读 · 0 评论 -
滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,...原创 2018-03-21 20:59:52 · 205 阅读 · 0 评论 -
两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.TreeSet;public class Solution { ...原创 2018-03-20 16:48:03 · 132 阅读 · 0 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack...原创 2018-03-20 16:39:18 · 149 阅读 · 0 评论 -
链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.HashSet;public class Solutio...原创 2018-03-19 16:03:19 · 130 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*//** * 递归就是要知道递归函数是干什么的?...原创 2018-03-19 12:51:48 · 145 阅读 · 0 评论 -
希尔排序
/** * 希尔排序:实质上是采用了分组插入的方法。先将整个待排序记录序列分割成几组,从而减少 * 参与插入排序的数据量,对每组分别进行直接插入排序,然后增加每组的数据量,重新分组。 * 这样当经过几次分组排序后,整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。 * 希尔排序对记录的分组,不是简单的逐段分割,而是将相隔某个增量的记录分成一组。 * * *//** *...原创 2018-06-06 20:14:13 · 134 阅读 · 0 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构 java
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { /**...原创 2019-05-27 22:37:32 · 491 阅读 · 0 评论 -
二叉树的深度 java
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2019-05-28 09:09:14 · 207 阅读 · 0 评论 -
1086 Tree Traversals Again java
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stac...原创 2019-05-29 15:48:32 · 167 阅读 · 0 评论 -
根据后序遍历和中序遍历建二叉树 java
public static TreeNode create(int[] post, int postLeft, int postRight, int[] in, int inLeft, int inRight) { if (postLeft &g...原创 2019-05-29 15:12:37 · 1432 阅读 · 0 评论 -
按之字形顺序打印二叉树 java
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/*public class Tre...原创 2019-05-28 20:35:54 · 275 阅读 · 0 评论 -
把二叉树打印成多行 java
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode...原创 2019-05-28 14:58:03 · 189 阅读 · 0 评论 -
拷贝二叉树 java
/*class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public TreeNode copyTreeNode(TreeNode ro...原创 2019-05-28 14:54:43 · 786 阅读 · 0 评论 -
1032 Sharing java
To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example,...原创 2019-05-31 08:13:56 · 207 阅读 · 0 评论 -
二叉搜索树的后序遍历序列是否合法 java
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { return judge(sequence, 0, sequence.leng...原创 2019-05-28 10:20:22 · 210 阅读 · 0 评论 -
二叉树层序遍历 java
从上往下打印出二叉树的每个节点,同层节点从左至右打印。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right...原创 2019-05-28 09:25:06 · 5620 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Rever...原创 2018-03-19 11:20:31 · 153 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { /** * head到tempTail是...原创 2018-03-19 10:45:30 · 153 阅读 · 0 评论 -
单链表的基本操作
#include#includetypedef int ElemType;#define Status int#define ERROR 0#define OK 1//****单链表的存储结构typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;//其实这里定义LNode与*Lin原创 2016-11-15 22:36:15 · 1821 阅读 · 0 评论 -
广度优先搜索
广度优先搜索遍历算法,说一下这个算法的本质,就是一层一层的遍历首先找到一个顶点,然后访问它所有的邻接点,并存放到队列中然后访问的每一个邻接点为顶点,再去访问和它相连的邻接点,一直这样重复下去。如果是连通图那肯定一下子就访问完了;如果是非连通图,那就需要找出没有被访问的顶点,然后继续访问;具体里面的函数如何实现,接下来我会每天更新(我也在学习中)void BFS(Grap原创 2016-11-12 10:23:52 · 576 阅读 · 0 评论 -
所有的正整数排在所有负数前面
#includeint a[1000],b[1000];int main(){ int n,i,j,num=0,flag=0; scanf("%d",&n); for(i=0;i<n;++i) { scanf("%d",&a[i]); if(a[i]>0) ++num; if(a[i]==0) flag=1; } if(flag) b[num]=原创 2016-10-16 21:44:01 · 1043 阅读 · 0 评论 -
串的模式匹配算法实现
#include#include#define MAXSIZE 255#define PF printf("\n") int nextval[MAXSIZE+10];char T[MAXSIZE+1],S[MAXSIZE+1];//主串S,模式串Tvoid get_nextval(){ int i=1,j=0; nextval[1]=0; while(i<strlen(T+1)原创 2016-10-16 21:46:59 · 2028 阅读 · 0 评论 -
DFS遍历邻接表
对于下面的定义又不懂的地方,请看我的关于邻接表的那一篇(数据结构的学习均参考烟蔚敏老师的数据结构书)#includeint visited[1000];//这里就不初始化了,初始化全部为0 void DFSTraverse(ALGraph G,int v){ printf("%d ",v); visited[v]=1; ArcNoded *p1; p1=G.ver原创 2016-11-05 16:22:32 · 934 阅读 · 0 评论 -
邻接表
/* 邻接表创建 */#include#define MaxInt 32767#define MVnum 100#define Status int#define OK 1typedef int VerTexType;typedef int ArcType;//对点和边的处理 typedef struct ArcNode{ int adjvex;//顶点的编号 stru原创 2016-11-05 16:09:27 · 360 阅读 · 0 评论 -
图的遍历DFS【邻接矩阵】
对于一个图,顶点与顶点之间如果相连的话,是没有权值的但是对于一个网则不同,2个顶点如果有联系,那就需要有权值#includeint visited[1000];//初始化数组为0 //这里我们需要一个访问数组,如果已经被访问,那就访问下一个void DFSTraverse(AMGraph G,int v){ int w;//遍历所有的顶点 printf("%d原创 2016-11-05 11:25:50 · 1377 阅读 · 0 评论 -
二叉树的基本操作实现
#include#include#include#define PF printf("\n")int m,n,max; typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//定义二叉树//创建二叉树 (按照前序顺序输入) void CreateBiTree(Bi原创 2016-10-23 17:30:00 · 2056 阅读 · 3 评论 -
最小生成树-普里姆算法(Prim)
什么是最小生成树?如何实现最小生成树的普里姆算法(Prim)?1、在一个连通网的所有生成树中,各边的代价之和最小的那棵生成树称为该连通网的最小代价生成树,简称最小生成树;简单点说,就是各个点连通,边权和最小的那棵树2、先说一下代码的核心思想(不知道核心看代码很费劲的)首先随便找一个顶点V0,存放在集合U中,我们寻找从V0出发到其他的各顶点的最小边权Vi,并存到集合U原创 2016-11-12 16:12:51 · 684 阅读 · 0 评论 -
最小生成树-克鲁斯卡尔算法(Kruskal)
克普斯卡尔算法实现最小生成树有些知识点我已经在prim算法中说过,在这里就直接说算法了、、我们需要求出最小生成树的最小边权和;直接对边权值进行从小到大排序,依次选出最小值不就行了吗?并且保证所有顶点成为一个连通网需要之一只有一点我们选取一条边,假设顶点为vi,vj,如果vi,vj已经在前面的挑选中已经连通我们就不需要这一条边,它是多余的,我们就需要继续向下寻找,直到找到原创 2016-11-12 21:36:42 · 1132 阅读 · 0 评论 -
最短路径-迪杰斯特拉算法
最短路径,我们这次介绍迪杰斯特拉算法其实我一直有一个疑问?我介绍的最小生成树2种算法,还有这次的迪杰斯特拉算法都是在矩阵的基础上记性操作的,我很想知道如果顶点的个数很多,有10000个,那么如果开一个2为的数组,肯定不行估计二维的最多只能开到[5000][5000];我想学习如何用邻接表实现这些算法,我感觉以前我写过,但现在已经完全不知道了,以后会了肯定及时的更新进入主原创 2016-11-12 23:19:33 · 491 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import ja...原创 2018-03-19 10:32:53 · 227 阅读 · 0 评论 -
去重函数-【实践才是检验真理的唯一标准】
去重函数 ,首先需要从小到大排列, 网上有很多人说,那些重复的数字放在了数组的后面,经过实践才知道那是错误的,只有经过实践的检验才是真理#include#include#includeusing namespace std;int main(){ int a[7]={1,1,3,4,3,5,6}; sort(a,a+7); int i; fo原创 2016-11-05 15:57:15 · 349 阅读 · 0 评论 -
递归算法实现字符串的逆序存储
#includechar s[1000];int i;void rever(){ char ch; i=0; scanf("%c",&ch); if(ch=='.')// . 代表输出结束 return ; else { rever(); s[i++]=ch; } s[i]='\0'; } int main(){ rever(); prin原创 2016-12-10 22:58:06 · 4180 阅读 · 0 评论 -
判别无向图中任意给定的2个顶点之间是否存在一条长度 为k的简单路径
判别无向图中任意给定的2个顶点之间是否存在一条长度为k的简单路径 无向图是没有权值的这里的k值代表经历k-1个顶点不要以为很简单,里面很niu的 int visited[MAXSIZE]//出发点为i,终点为j,长度为k int exist_path_len(ALGraph G,int i,int j,int k) { if(i==j&&k==0) return 1原创 2016-11-14 23:29:46 · 20203 阅读 · 14 评论 -
顺序表的基本操作实现
顺序表的基本操作实现在复习的时候顺便写写代码(基本和书上的一样)#include#include#define OK 1#define ERROR 0#define Status int#define MAXSIZE 10000typedef int ElemType;//对顺序表的定义 typedef struct{ ElemType *elem;//E原创 2016-11-14 22:06:46 · 1009 阅读 · 0 评论 -
深度优先遍历的非递归
从v点出发实现深度优先遍历的非递归过程;连通图采用邻接表存储结构 首先介绍一下核心的思想:其实所有的递归过程,都是依靠栈来实现的对于这个算法我们不能用递归,那么就直接用栈就行了下面的代码只是一个思想,有的地方没有实现,其实具体自己去实现会很简单 void DFSSn(Graph G,int v){ Stack s; SetEmpty(s); Push(s,v);原创 2016-11-14 13:33:38 · 1099 阅读 · 0 评论 -
邻接矩阵
// 创建网 #include#define MaxInt 32767#define MVNum 100#define Status int #define OK 1typedef char VerTexType;//假设定点的数据类型是字符型typedef int ArcType;//假设边的权值为整型typedef struct{ VerTexType vexs[MaxI原创 2016-11-01 17:45:40 · 11078 阅读 · 0 评论