![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
sy没有撤退可言
大人,时代变了
展开
-
数据结构之——树(二)
二叉树的二叉链表实现对二叉树的操作由二叉树结点类和二叉树类共同。采用二叉链表的二叉树结点类和二叉树类设计如下。1.二叉链表结点类声明二叉树的二叉链表结点类BinaryNode< T >如下,T指定结点的元素类型。package Tree;public class BinaryNode<T> { //二叉树的二叉链表结点类,T指定结点的元素类型 public T data; //数据域,存储数据元素 public BinaryNode<T> left,r原创 2020-08-10 20:34:49 · 480 阅读 · 0 评论 -
数据结构之——树(一)
树定义树(Tree)是由n个结点组成的有限集合(树中的元素通常称为结点)。n=0的树称为空树;n>0的树T由以下两个条件约定构成:(1)有一个特殊的结点称为根(Root)结点,它只有后继结点,没有前驱结点。(2)除根节点之外其他结点分为m(-1<m<n)个互不相交的集合T0、T1…Tm-1,其中每个集合也具有树结构,称为根的子树。树是递归定义的。结点是树的基本单位,若干个结点组成一棵子树,若干互不相交的子树组成一棵树。树中每个结点都是该树中某一棵子树的根。因此,树是由结点组成的、结原创 2020-08-10 17:28:18 · 629 阅读 · 0 评论 -
数据结构之——数组
数组数组是顺序存储的随机存取结构,是其他数据结构实现顺序存储的基础。一维数组的逻辑结构是线性表,多维数组是线性表的拓展。下面就让我们以二维数组为例,说明多维数组的逻辑结构、遍历和存储结构。1.二维数组的逻辑结构二维数组是一维数组的扩展,二维数组是“元素为一维数组”的一维数组。一个m行n列的二维数组,既可以看成由m个一维数组(行)所组成的线性表,也可以看成n个一维数组(列)所组成的线性表其中,每个元素aij(-1<i<m,-1<j<n)同时属于两个线性表:第i行的线性表和第j原创 2020-07-31 12:06:43 · 2241 阅读 · 0 评论 -
合并两个有序链表
最近在巩固链表知识的时候去LeetCode上刷了些题,首先选了一道难度标注简单的链表题。废话不多说我们直接来看题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。代码原始模板如下:最开始想到的就是暴力解法,就是将两个链表数据都取出放到整数数组中来,然后升序排序,然后依次插入到一个新链表中。不过后面想到另外一个不用新建链表的办法就是增加一个哑结点,即ListNode dummy=new ListNode(0),接着我们可用一个指针p来指向哑结点。首先原创 2020-07-30 19:11:53 · 290 阅读 · 0 评论 -
数据结构之——队列
队列抽象数据类型队列(queue)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。向队列中插入元素的过程称为入队,删除元素的过程称为出队。允许入队的一端叫做队尾,允许出队的一端叫做队头。没有元素的队列称为空队列。由于插入和删除分别在队尾和队头进行,最先入队的总是最先出队。因此队列的特点是“先进先出”。队列的基本操作有创建队列、判断队列是否为空、入队和出队。队列和栈一样,不支持对指定位置的插入和删除。声明队列接口Queue< T >如下package Queue;publi原创 2020-07-29 18:34:33 · 368 阅读 · 0 评论 -
数据结构之——栈
栈抽象数据类型栈(Stack)是一种特殊的线性表,其插入和删除只允许在线性表的一端进行。允许操作的一端称为栈顶(Top),不允许操作的一端称为栈底(Bottom)。栈中插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。没有元素的栈称为空栈。由于栈的插入和删除只能在栈顶进行,每次入栈元素即成为栈顶元素,每次出栈元素总是最后一个入栈元素,因此栈的特点就是先进后出。栈的基本操作包括创建栈、判断栈是否为空、入栈、出栈和取出栈顶元素等。栈不支持对指定位置的插入、删除等操作。现在声明栈接口如下,原创 2020-07-28 23:31:05 · 453 阅读 · 1 评论 -
线性表(2)——单链表
概念:单链表是由一个个结点链接而成的,而结点是存储一个数据元素的存储单元。一个结点至少包括以下两个部分:结点(数据域,地址域),其中数据域用于存储数据元素,地址域存储前驱或者后续元素的地址。以下定义单链表结点类和单链表类描述单链表。首先声明单链表结点类Node的泛型类如下,成员变量data表示结点的数据域,存储数据元素,数据类型是T;next表示结点的地址域,存储后继结点的引用信息。package dataStructure;public class Node<T> { public原创 2020-07-27 17:19:28 · 567 阅读 · 0 评论 -
线性表(1)——顺序表
线性表的顺序存储结构称为顺序表,它使用一维数组依次存放线性表的数据元素。顺序表是一种随机存取结构。下面我们来看一下顺序表类的设计与实现。声明顺序类SeqList< T >如下,有两个具有保护权限的成员变量element和n,element数组存放数据元素,元素类型为T;n表示顺序表元素个数,0=<n<element.length。package dataStructure;//顺序表类,实现ADTList<T>声明的方法,T表示数据元素public clas原创 2020-07-27 10:30:55 · 842 阅读 · 1 评论 -
排序算法(2)——快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实实用。但要直接默写出快速排序还是有一定难度的,下面就让我们来看下何为快速排序。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对原创 2020-07-20 16:07:17 · 222 阅读 · 0 评论 -
排序算法(1)——冒泡排序
冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。一、算法基本思想(1)基本思想冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。(2)运行过程冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第二个大(小),原创 2020-07-20 10:40:39 · 854 阅读 · 0 评论 -
用两个栈实现一个队列
最初重温了下数据结构的栈和队列的基本使用,想要在LeetCode上刷下题巩固,首先选了道标注简单难度的题,结果最开始就看懵了,不太理解它的输入输出是怎么理解,下面我们就来看一下题目描述:以下是初始代码模板:下面我来带没看懂的朋友理解一下这个输入输出的意思:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] 这里是要执行的方法,从左到右执行[[],[3],[],[]]对应上面的方法,是上面方法的参数。CQueue和deleteHead方法不需原创 2020-07-19 10:24:53 · 364 阅读 · 0 评论