
数据结构
文章平均质量分 90
ty6693
这个作者很懒,什么都没留下…
展开
-
二叉树的四种遍历方式【Java实现】
1.前序遍历前序递归遍历:import java.util.ArrayList;import java.util.List;import java.util.Stack;public class preorderTraversal { //前序递归 public List<Integer> preorderTraversal1(TreeNode ro...原创 2019-09-08 12:40:51 · 485 阅读 · 0 评论 -
判断链表是否带环,若带环求交点、环的入口点【Java实现】
一、判断链表是否带环分析:定义两个指针:快指针和慢指针,快指针一次走两步,慢指针一次走一步; 如果链表带环,那么快慢指针会在环中相遇【快指针等于满指针】 如果快指针走到头时,快慢指针没有相等的时候,那么说明链表不带环//环形链表//给定一个链表,判断链表中是否有环。// 分析:定义两个指针:快指针和慢指针 ,快指针一次走两步,慢指针一...原创 2019-07-31 23:22:46 · 487 阅读 · 0 评论 -
两个栈实现一个队列&两个队列实现一个栈【Java实现】
前言栈栈是一种线性表,只能在一端进行插入元素(入栈)和删除元素(出栈),通常我们将可以进行入栈出栈的一端称为栈顶,另一端称为栈底。日常生活中一端封闭的山洞就是栈的一个典型例子。特性:后进先出(LIFO:Last In First Out)队列队列也是一种线性表,一端插入元素(入队列),另一端删除元素(出队列),通常我们将可以插入元素的一端称为队尾,可以删除元素的一端称为队...原创 2019-05-06 20:36:13 · 364 阅读 · 0 评论 -
判断两个链表是否相交,若相交,求交点。
首先我们来看一下单链表:第一种情况:两个链表均不带环判断两个不带环的链表是否相交,如果两个链表相交的话可如下图所示:判断是否相交:由上图可知,如果两个不带环链表相交的话这两个不带坏链表的尾节点地址一定相同,所以我们只要各自遍历两个链表,判断其尾节点地址是否相同,如果相同则相交,否则不相交。typedef struct SListNode{ DataType data...原创 2019-02-13 22:18:40 · 384 阅读 · 0 评论 -
无头单链表中删除非尾节点及插入节点(不能遍历链表)
首先给出链表节点的定义:#include <stdlib.h>#include <assert.h>#include <stdio.h>typedef int DataType;typedef struct SListNode{ DataType data; struct SListNode *pNext;} SListNode;...原创 2019-02-13 16:31:33 · 371 阅读 · 0 评论 -
冒泡排序&快速排序(前后指针、挖坑、左右指针法)【Java实现】
一、冒泡排序思想:对N个元素进行升序排列时,依次比较两个相邻的元素,如果前者大于后者就交换,一趟排序找出一个最大值并放在最后,然后缩小排序区间继续找出该区间的最大值,并放在倒数第二个位置,倒数第一个位置...,直到区间缩小至只剩一个元素,排序完成。整个排序过程要进行N-1趟排序。原理:1.比较相邻的元素。如果前者比后者大,就交换他们两个。2.对每一对相邻元素做同样的工作,从开始...原创 2018-11-02 21:14:20 · 713 阅读 · 0 评论 -
选择排序&堆排序【Java实现】
一、选择排序基本思想:通过不断的比较数组中待排序部分第一个元素与后面所有元素的大小,找出无序部分的最大值和最小值,并将最大值放在无序部分的最末,最小值放在无序部分的最前面。进而缩小无序部分的长度,直到所有元素都排好序。如给一个数组{9,4,3,2,1,5,7}。第一次无序部分为整个数组,存放最大值和最小值的地方分别为数组最后一个元素的位置和数组第一个元素的位置,第一个元素既是最大值又是最小...原创 2018-10-29 15:43:29 · 219 阅读 · 0 评论 -
直接插入排序&希尔排序【Java实现】
一、直接插入排序思想:在一个已排好序的序列基础上,每次将下一个待排序记录有序插入到已排好序的序列中,直到所有待排序记录全部插入为止。步骤:1. 刚开始排序时,可将数组第一个元素认为是已经有序(只有一个数时肯定有序)2. 接着依次从数组第二个元素开始,到数组最后一个元素,每次顺次取出一个元素插入已排序序列中3. 当待排序元素全部插入到已排序序列中时完成排序注意:直接插...原创 2018-10-29 10:53:28 · 511 阅读 · 0 评论 -
Java实现复杂链表的复制
复杂链表的定义:复杂链表的每个节点包括数据,指向下一个节点的指针和一个随机指针(既可指向自己,也可指向NULL,还可指向其它任意节点)。//复杂链表的节点定义class RandomListNode { int label;//节点对应的值 RandomListNode next = null;//指向下一个节点的指针 RandomListNode random =...原创 2018-09-10 10:03:22 · 315 阅读 · 0 评论 -
合并两个有序链表,合并后依然有序
第一步:找到合并后链表的第一个结点两个有序链表中,把第一个结点数据小的作为合并后链表的第一个结点第二步:哪个结点的数据小哪个结点就尾插到合并后的链表中比较两个链表中结点数据大小,数据小的结点尾插到合并后的链表中,同时该结点向后走,直到两个链表中有一个为空。第三步:将仍有结点的链表尾插到合并后的链表中#include <stdlib.h>#include <...原创 2018-09-10 08:31:21 · 843 阅读 · 0 评论 -
单链表实现约瑟夫环问题
首先我们来了解一下什么是约瑟夫环:约瑟夫环(约瑟夫环问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围只剩下一个人。今天用单链表实现约瑟夫环:了解完什么是约瑟夫环问题后,我们知道这是一个同心圆,而单链表并不是一个循环链表...原创 2018-09-10 08:17:56 · 964 阅读 · 0 评论 -
C语言逆置/反转单链表(头插+头删、3个指针)
首先我们需要知道的是逆置单链表不是逆序打印单链表,逆置单链表改变了原链表!!!逆置单链表的两种方法:头删+头插;3个指针#include <stdlib.h>#include <assert.h>#include <stdio.h>typedef int DataType;typedef struct SListNode{ DataTy...原创 2018-09-09 17:26:53 · 642 阅读 · 0 评论 -
逆序打印单链表(递归和非递归)
首先我们需要注意的是逆序打印单链表只是改变了打印顺序而已,对原链表并不做任何修改【注意与逆置单链表的区别】今天要逆序打印的是无头结点的单链表。逆序打印单链表的两种方法:递归和非递归#include <stdlib.h>#include <assert.h>#include <stdio.h>typedef int DataType;t...原创 2018-08-05 11:42:21 · 3145 阅读 · 5 评论 -
数据结构_单链表基本操作
在开始前,我先介绍两个函数:malloc()、assert()。malloc()函数:它是一个参数为size_t(unsigned int)类型返回值为空指针类型的函数,参数size则表示要申请的字节数。 assert()函数:它是一个参数为int类型且无返回值的断言函数,其参数expression表示返回表达式的真假结果,如果表达式为假,则打印诊断结果并中止程序。 ...原创 2018-08-05 11:33:39 · 220 阅读 · 0 评论