数据结构与算法
数据结构与算法
后端码匠
道阻且長,行則將至
展开
-
图解排序算法(四)之归并排序
图解排序算法(四)之归并排序基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列再来转载 2021-04-28 20:12:15 · 134 阅读 · 0 评论 -
队列(常用数据结构之一)
队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。一个队列为z=(a1,a2,…,an), 如图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tP9akerb-1607330166980)(https://imgkr2.cn-bj.ufileos.com/0f0f712d-04e3-4712-abb1-e2原创 2020-12-07 16:36:44 · 405 阅读 · 0 评论 -
线性表的顺序存储——顺序表
之前我们讲了线性表, 本篇来阐述下线性表的顺序存储——顺序表定义线性表的顺序存储又称为顺序表, 它是用一组地址连续的存储单元依次存储线性表中的数据元素. 逻辑上相邻的两个数据元素在物理位置上同样相邻.规律顺序表中逻辑顺序与物理顺序相同L = (a1a_{1}a1, a2a_{2}a2, …, aia_{i}ai, ai+1a_{i + 1}ai+1, …, ana_{n}an)其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每一个小格子就代表一个存储单元。注原创 2021-01-09 19:14:31 · 1741 阅读 · 0 评论 -
二叉树的建立以及先序、中序、后序遍历C语言实现---【递归方式】
下面的C语言代码将用下图的二叉树作为测试例,输出前中后三种遍历方式下的结果。#include "stdio.h"#include "stdlib.h"#undef OK#define OK 1#undef ERROR#define ERROR 0#undef OVERFLOW#define OVERFLOW -2#undef NULL#define NULL 0typedef char TElemType;typedef int Status;typedef struct B原创 2021-04-10 14:10:30 · 1132 阅读 · 1 评论 -
利用队列实现车厢编组
利用队列实现车厢编组问题。假设队列元素是char类型,‘H’表示硬座,‘S’表示软卧,队列A表示一组硬座和卧铺混编的车厢。要求把队列A中的硬座车厢移动到队列B,队列A中的卧铺车厢移动到队列C,同时保留原有硬座车厢之间和软卧车厢之间的先后顺序不变。如HSHHSHSSHH,分别输出软卧车组:SSSS和硬座车组:HHHHHH。#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define OVER.原创 2020-12-06 23:48:21 · 1816 阅读 · 3 评论 -
栈(顺序栈)
栈作为一个最简单的数据结构,实现起来也非常容易,想想现在有一摞盘子,每次只能取走或放一个盘子且只能最上面进行操作;那么我们如果有一个索引TOP时刻指向最上面的那个盘子,栈不就实现了么?栈栈的理论栈是一个先进后出的结构,类似于堆盘子,先放到地上的盘子最后被取走(默认只能取走一个盘子)栈其实就是操作受限的线性表,只有一个口,每一次操作时,这个口可以当出口也可以当入口.例如:水桶,注入水时,水桶的头当做入口,倒水时,水桶的头当做出口什么是栈栈是限制插入和删除只能在一个位置上进行的线性表。.原创 2020-12-08 09:24:33 · 573 阅读 · 0 评论 -
十进制转n进制
直接上代码#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2typedef int ElemType;typedef int Status;#define STACK_INIT_SIZE 10#define STACKINCREMENT 5typedef struct { Ele原创 2020-12-08 20:31:20 · 267 阅读 · 0 评论 -
浅谈二叉树
二叉树简介二叉树是由n(n>=0)个结点(Node)组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。n=0时称为空二叉树。二叉树的五种形态:特点由二叉树定义以及图示分析得出二叉树有以下特点:每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。性质在二叉树的第i层上最多有2i-1 个节点 。(i>=1)二叉树原创 2020-12-15 23:49:06 · 232 阅读 · 0 评论 -
线性表概述
线性表定义线性表(linear list)是具有相同的数据类型的n(n ≥\geq≥ 0 ) 个数据元素的有限序列(有限序列是指序列中的元素个数是有限的,即序列的长度是有限的), 其中n为表长, 当n = 0 时线性表是一个空表. 若用L命名线性表, 其一般表示为L = (a1a_{1}a1, a2a_{2}a2, …, aia_{i}ai, ai+1a_{i + 1}ai+1, …, ana_{n}an)特征a1a_{1}a1 是唯一的"第一个数据元素", 又称表头元素.an原创 2021-01-07 14:35:05 · 185 阅读 · 0 评论 -
设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点
2^9 - 1 = 511511 - 500 = 112 ^ 8 - 1 = 255511 - 255 = 256“所以缺少了11个右结点”的“右”字上.是事实是最后一层上少了倒着少了11个结点.明确的说是少了6个右,5个左.所以,应该256-11,但是由于最后一层少了11个结点,所以上一层多了5个叶子结点,所以最终答案应该是:256-11+5=250...原创 2021-04-27 08:52:51 · 4760 阅读 · 0 评论 -
【C/C++】交流配对
假设在交流会上,男生和女生分成两队,每一轮交流中,依次从男队和女队的队头各出一个人,两人组成一个交流组进行交流,交流后两人分别回归自己队伍的尾部。若两队初始人数不同,则较长那一队中没有交流对象的人等待下一轮的配对交流。写一算法,模拟上述配对问题,并输出每次配对结果。如:男队和女队的人数分别是5和3,每队的人都有一个编号(分别是12345和123),共交流4轮,则第一轮配对输出<1,1> <2,2><3,3>,第二轮配对输出<4,1> <5,2> .原创 2020-12-08 21:30:12 · 657 阅读 · 0 评论 -
队列的应用、栈的应用
实验一:队列的应用、栈的应用一. 实验目的1、掌握队列的特点(先进先出 FIFO)及基本操作,如入队、出队等。2、利用循环队列的特点解决实际问题,提高编程能力。3、掌握栈的特点(先进后出 FILO)及基本操作,如入栈、出栈等。4、利用栈的特点解决实际问题,提高编程能力。二. 实验内容1、编写一个程序实现循环队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化循环队列;(2)给定一个元素,将此元素插入此队列中;(3)将队头一个元素出队。2、编程实现顺序栈的各种基本运原创 2020-12-06 18:58:16 · 1088 阅读 · 1 评论 -
C 数据结构之十大排序
复杂程度冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最原创 2021-04-17 16:43:16 · 196 阅读 · 3 评论 -
剑指 Offer打卡 双指针
双指针原创 2022-04-13 09:57:20 · 186 阅读 · 0 评论 -
剑指 Offer打卡 动态规划
动态规划原创 2022-04-13 09:51:40 · 459 阅读 · 0 评论 -
剑指 Offer打卡 树
树原创 2022-04-13 09:41:42 · 327 阅读 · 0 评论 -
二叉树的前、中、后、层序遍历整理(Java版本)
源自快手电商一面package cn.com.codingce.树.遍历;import cn.com.codingce.树.TreeNode;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * 树的遍历 * * @author inke219223m */public class Solution { public static void main(Str原创 2022-03-31 13:19:03 · 898 阅读 · 0 评论 -
剑指 Offer打卡 栈队列堆
栈队列堆原创 2022-03-06 13:44:25 · 296 阅读 · 0 评论 -
剑指 Offer打卡 数组与矩阵
二维数组中的查找public class Solution { public static void main(String[] args) { System.out.println(new Solution().Find(2, new int[][]{{1, 1}})); } public boolean Find(int target, int [][] array) { if(array == null || array.length ==原创 2022-03-06 09:32:43 · 194 阅读 · 0 评论 -
4个足球队打小组单循环
题目描述4个足球队打小组单循环,计分方式:胜3分平1分负0分,如果计分相同,则净胜球多的队伍排名靠前,如果净胜球还一样,则进球多的球队排名靠前。小组前两名出线。问可能出线的最低分数是多少。请说明推理过程。 备注:单循环赛是指所有参加比赛的队两两之间都比赛一次,最后按各队在全部比赛中的积分,得失分率排列名次。解决方案设:四个小队分别为A,B,C,D。若:要出线2队则:使A,B,C,D 两两比赛全为平局则:此时A,B,C,D四个队伍得分均为3又已知:计分相同,则净胜球多的队伍排名靠前则:按进球数原创 2021-04-21 21:12:42 · 4957 阅读 · 0 评论 -
【算法】最小的K个数
题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]import java.util.ArrayList;import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbe原创 2021-04-21 14:51:55 · 165 阅读 · 0 评论 -
【算法】输入一个链表,反转链表后,输出新链表的表头。
题目输入一个链表,反转链表后,输出新链表的表头。示例1输入{1,2,3}返回值{3,2,1}说明:本题目包含复杂数据结构ListNodeJava/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Re原创 2021-04-21 10:34:42 · 293 阅读 · 1 评论 -
八大排序算法
???? 八大排序算法???? 关系和复杂度???? 关系???? 复杂度???? 一、冒泡排序???? 原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较???? 代码#include <stdio.h>void bubble_sort(int a[], int size);int main(){ int a[7] = {1, 2原创 2021-02-22 19:04:29 · 131 阅读 · 0 评论 -
无重复字符最长子串
无重复字符最长子串双指针/滑动窗口/移动队列无重复字符最长子串package cn.com.codingce.aaclengthoflongestsubstring;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;import java.util.stream.Collectors;/** * 3.原创 2021-01-16 11:50:11 · 133 阅读 · 0 评论