- 1. STL简介1.1 什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。1.2 STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码... 1. STL简介1.1 什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。1.2 STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码...
- 数组和指针都是用来处理内存地址的操作,二者在C语言中可以互换使用。数组是相同数据类型的一组集合,这些数据在内存中是连续存储的,在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的,只是数据的组织方式不同。在汇编语言中,实现多维数组的寻址方式相对于C语言来说稍显复杂,但仍然可行。下面介绍一些常用的汇编语言方式来实现多维数组的寻址。 数组和指针都是用来处理内存地址的操作,二者在C语言中可以互换使用。数组是相同数据类型的一组集合,这些数据在内存中是连续存储的,在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的,只是数据的组织方式不同。在汇编语言中,实现多维数组的寻址方式相对于C语言来说稍显复杂,但仍然可行。下面介绍一些常用的汇编语言方式来实现多维数组的寻址。
- 函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等。 函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等。
- 文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。任何数据分析的第一步都是按照所需要的格式创建数据集。在 R 中,这个任务包括两个步骤:首先选择一种数据结构来存储数据,然后将数据输入或者导入这个数据结构中。下面介绍 R 中用于存储数据的多种数据结构。 R 的数... 文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。任何数据分析的第一步都是按照所需要的格式创建数据集。在 R 中,这个任务包括两个步骤:首先选择一种数据结构来存储数据,然后将数据输入或者导入这个数据结构中。下面介绍 R 中用于存储数据的多种数据结构。 R 的数...
- 计数排序(非比较排序)那到现在为止:前面我们学的所有的排序算法,它们都是一大类的,即比较排序,就是我们在排序的过程中都对数据进行了大小的比较。 那接下来我们还要学习一个非比较排序——计数排序。 当然非比较排序肯定不止这一种,但我们这里重点给大家讲一下这个计数排序,因为计数排序在生活和工作中还是可能应用会比较多一点的,而且在找工作的时候也有可能会被考到。接下来我们就一起来学习一下:计数排序是一... 计数排序(非比较排序)那到现在为止:前面我们学的所有的排序算法,它们都是一大类的,即比较排序,就是我们在排序的过程中都对数据进行了大小的比较。 那接下来我们还要学习一个非比较排序——计数排序。 当然非比较排序肯定不止这一种,但我们这里重点给大家讲一下这个计数排序,因为计数排序在生活和工作中还是可能应用会比较多一点的,而且在找工作的时候也有可能会被考到。接下来我们就一起来学习一下:计数排序是一...
- 归并排序接下来我们来学习归并排序:其实归并排序的思想我们在之前做题的过程中也用到过,之前文章里我们有讲过一些顺序表和链表相关的习题,合并两个有序链表 还有 合并两个有序数组,解这两道题我们其实就用到了归并的思想。 就拿合并两个有序链表那个题来说,我们是怎么做的: 两个指针分别遍历两个链表,依次取小的尾插,最终就将两个链表合并成一个有序链表(升序)。 这其实就是归并的思想。基本思想归并排序(M... 归并排序接下来我们来学习归并排序:其实归并排序的思想我们在之前做题的过程中也用到过,之前文章里我们有讲过一些顺序表和链表相关的习题,合并两个有序链表 还有 合并两个有序数组,解这两道题我们其实就用到了归并的思想。 就拿合并两个有序链表那个题来说,我们是怎么做的: 两个指针分别遍历两个链表,依次取小的尾插,最终就将两个链表合并成一个有序链表(升序)。 这其实就是归并的思想。基本思想归并排序(M...
- 交换排序基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动(升序),降序则相反。4.1 冒泡排序算法思想冒泡排序大家应该都比较熟悉,思想也很简单:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素... 交换排序基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动(升序),降序则相反。4.1 冒泡排序算法思想冒泡排序大家应该都比较熟悉,思想也很简单:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素...
- @[TOC]这篇文章我们来学习排序。 1. 排序的概念及其运用1.1 排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这... @[TOC]这篇文章我们来学习排序。 1. 排序的概念及其运用1.1 排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这...
- 前言上一篇文章我们刚刚学完二叉树初阶的相关知识,那接下来我们就趁热打铁,这篇文章,我们一起来看几道二叉树相关的OJ练习。1. 单值二叉树把题目链接给大家,供大家练习链接: link我们一块看一下题:思路分析题目让我们干啥呢?给定一棵二叉树,我们要写一个程序判断出它是不是一棵单值二叉树(即所有结点的值都相同的二叉树)。应该怎么搞?思路1. 遍历对比首先第一种思路,就非常简单粗暴,我们可以记录一... 前言上一篇文章我们刚刚学完二叉树初阶的相关知识,那接下来我们就趁热打铁,这篇文章,我们一起来看几道二叉树相关的OJ练习。1. 单值二叉树把题目链接给大家,供大家练习链接: link我们一块看一下题:思路分析题目让我们干啥呢?给定一棵二叉树,我们要写一个程序判断出它是不是一棵单值二叉树(即所有结点的值都相同的二叉树)。应该怎么搞?思路1. 遍历对比首先第一种思路,就非常简单粗暴,我们可以记录一...
- Vector容器是C++ STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。该容器可以方便、灵活地代替数组,容器可以实现动态对数组扩容删除等各种复杂操作,其时间复杂度O(l)常数阶,其他元素的插入和删除为O(n)线性阶,其中n为容器的元素个数,vector具有自动的内存管理机制,对于元素的插入和删除可动态... Vector容器是C++ STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。该容器可以方便、灵活地代替数组,容器可以实现动态对数组扩容删除等各种复杂操作,其时间复杂度O(l)常数阶,其他元素的插入和删除为O(n)线性阶,其中n为容器的元素个数,vector具有自动的内存管理机制,对于元素的插入和删除可动态...
- 前言这篇文章,我们继续来看几道题,今天是与链表相关的面试题。每一道题,我们都要争取找出最优的算法来实现。题目1:移除链表元素题目链接先给大家:链接: link🆗,接下来我们一起来看一下:题目分析大家如果看过我上一篇文章(链接: link )的话,会发现这道题跟上一篇文章中的第一道题 移除元素 是很像的。只不过那道题是是在数组里,而今天这道题是移除链表中的某个元素。题目给我们一个链表的头节点... 前言这篇文章,我们继续来看几道题,今天是与链表相关的面试题。每一道题,我们都要争取找出最优的算法来实现。题目1:移除链表元素题目链接先给大家:链接: link🆗,接下来我们一起来看一下:题目分析大家如果看过我上一篇文章(链接: link )的话,会发现这道题跟上一篇文章中的第一道题 移除元素 是很像的。只不过那道题是是在数组里,而今天这道题是移除链表中的某个元素。题目给我们一个链表的头节点...
- 前言这篇文章,我们一起来看几道数组相关的面试题。每道题目,我们给出的解题思路可能都不止一种,我们要不断分析讨论,找出最优的解题思路来实现。一起来看看吧!!!题目1:移除元素题目链接放在这里,供大家练习:链接: link先来看一下题目吧:题目是什么意思呢?其实就是给我们一个数组,还有一个值val,我们要删除这个数组中所有值和val相等的元素,然后返回删除之后的新数组的长度。那怎么解决呢?接下来... 前言这篇文章,我们一起来看几道数组相关的面试题。每道题目,我们给出的解题思路可能都不止一种,我们要不断分析讨论,找出最优的解题思路来实现。一起来看看吧!!!题目1:移除元素题目链接放在这里,供大家练习:链接: link先来看一下题目吧:题目是什么意思呢?其实就是给我们一个数组,还有一个值val,我们要删除这个数组中所有值和val相等的元素,然后返回删除之后的新数组的长度。那怎么解决呢?接下来...
- 前言这篇文章,我们一起来解决一道与链表相关的经典面试题:复杂链表(带随机指针)的复制。1.题目介绍我们先来一起了解一下这道题:这道题是《剑指offer》上的一道经典题目:在力扣上也有原题:链接: link这篇文章,就给大家详细讲解一下这道题。我们一起来看一下题目:题目呢,看起来还挺长的。但是我们不能上去被题目就吓到了,其实这个题目就是让我们复制链表嘛,给我们一个链表,我们要自己再创建一个和它... 前言这篇文章,我们一起来解决一道与链表相关的经典面试题:复杂链表(带随机指针)的复制。1.题目介绍我们先来一起了解一下这道题:这道题是《剑指offer》上的一道经典题目:在力扣上也有原题:链接: link这篇文章,就给大家详细讲解一下这道题。我们一起来看一下题目:题目呢,看起来还挺长的。但是我们不能上去被题目就吓到了,其实这个题目就是让我们复制链表嘛,给我们一个链表,我们要自己再创建一个和它...
- 前言上一篇文章我们学习了单链表,同时我们提到了链表其实有很多种结构:带头或不带头,循环或不循环。但其实,最常用的还是两种结构:上一篇文章我们已经学了单链表(不带头),那这篇文章,我们就来学习一下带头双向循环链表。带头双向循环链表实现1. 结构介绍首先,从结构上来说,带头双向循环链表是结构最复杂的:它带哨兵位的头结点,还是双向的,还循环。带头双向循环链表一般用来单独存储数据。实际中使用的链表数... 前言上一篇文章我们学习了单链表,同时我们提到了链表其实有很多种结构:带头或不带头,循环或不循环。但其实,最常用的还是两种结构:上一篇文章我们已经学了单链表(不带头),那这篇文章,我们就来学习一下带头双向循环链表。带头双向循环链表实现1. 结构介绍首先,从结构上来说,带头双向循环链表是结构最复杂的:它带哨兵位的头结点,还是双向的,还循环。带头双向循环链表一般用来单独存储数据。实际中使用的链表数...
- 前言上一篇文章,我们学习了顺序表,在文章的最后,我们提出了一些顺序表存在的问题和缺陷。我们再来回顾一下,对于顺序表来说:中间/头部的插入删除,时间复杂度为O(N)realloc扩容(特别是异地扩,需要申请新空间,拷贝数据,释放旧空间)会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就... 前言上一篇文章,我们学习了顺序表,在文章的最后,我们提出了一些顺序表存在的问题和缺陷。我们再来回顾一下,对于顺序表来说:中间/头部的插入删除,时间复杂度为O(N)realloc扩容(特别是异地扩,需要申请新空间,拷贝数据,释放旧空间)会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就...
上滑加载中
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签