做网站时候如果添加微信代码/山东济南seo整站优化费用

做网站时候如果添加微信代码,山东济南seo整站优化费用,帝国网站管理系统安装教程,直播电商的发展趋势小肥柴慢慢学习数据结构笔记(C篇)(4-3 关于栈和队列的讨论) 目录1 双端栈/队列2 栈与队列的相互转化2-1 栈转化成队列2-2 队列转化成栈 3 经典工程案例3-1 生产者和消费者模型(再次重温环形缓冲区)3-2 MapR…

小肥柴慢慢学习数据结构笔记(C篇)(4-3 关于栈和队列的讨论)

  • 目录
    • 1 双端栈/队列
    • 2 栈与队列的相互转化
      • 2-1 栈转化成队列
      • 2-2 队列转化成栈
    • 3 经典工程案例
      • 3-1 生产者和消费者模型(再次重温环形缓冲区)
      • 3-2 MapReduce中的缓冲区对<k,v>键值对排序
    • 4 小结

目录

(本帖主要从形态上讨论线性表的一些共有特性,不涉及具体的编码环节)

1 双端栈/队列

(1)一般形态的讨论:经过大量编程训练后,不禁会有疑问:
【Q】为何ArrayList,LinkedList,Stack、Queue这四种基本形态以及它们的变种被统称为“线性表”呢?涉及到“双端”话题时,又应该如何正确理解呢?

【A】很多文献中总是给出大量的理论化论述,但是我认为可以简单的归纳如下:
(1)一个线性表两头都能进出。(注意红色箭头代表的数据进出方向。)
(2)可灵活设定元素增长方向:两头向中间 or 中间向两头;当然,都要处理越界/碰头问题。
(3)人们也习惯将带回绕的线性表当做一个环来看待。(老生常谈的话题,后续看案例。)
在这里插入图片描述
在这里插入图片描述
此时,在翻看双向链表的示意图,是不是更有味道了?
在这里插入图片描述

2 栈与队列的相互转化

这是一对经典的面试问题,在Leecode上有对应练习,大家可以试试看。

2-1 栈转化成队列

【Q】给定两个栈,你能否组装成一个队列?
【A】设置一个栈作入队用,另一个栈作出队用:
(1)入队直接压到输入栈。
在这里插入图片描述
(2)出队时:
<1> 若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈。
<2> 此时输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
<3> 若输出栈不为空,直接弹出即可。
在这里插入图片描述

2-2 队列转化成栈

【Q】给你两个队列,你能否组装成一个栈?
【A1】常规解法
(1)queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列。
(2)入栈操作时,首先将元素入队到queue2,然后将queue1的全部元素依次出队并入队到queue2,此时queue2的前端的元素即为新入栈的元素,再将queue1和queue2互换,则queue1的元素即为栈内的元素,queue1的前端和后端分别对应栈顶和栈底。
(3)由于每次入栈操作都确保queue1的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除queue1的前端元素并返回即可,获得栈顶元素操作只需要获得queue1的前端元素并返回即可(不移除元素)。
(4)由于queue1用于存储栈内的元素,判断栈是否为空时,只需要判断queue1是否为空即可。
在这里插入图片描述
在这里插入图片描述
【A2】实际上,使用一个队列亦可:循环排队。
在这里插入图片描述
在这里插入图片描述

3 经典工程案例

3-1 生产者和消费者模型(再次重温环形缓冲区)

(1)数据消费者从队列中读取新的数据。
(2)数据生产者从队列中写入新的数据。
(3)只要读写操作速度协调,必然可以一直复用这段缓存。(溢写,spill机制)
在这里插入图片描述
【注】实际上把这个ring撇直了也没有那么神秘,不是吗?

3-2 MapReduce中的缓冲区对<k,v>键值对排序

在这里插入图片描述
【Q1】设想现在给你一个Byte数组(线性数据结构)如何把<k1,v1> ~ <kn,vn>n个键值对数据存入其中?
【Q2】此时若直接排序会导致频繁的内存腾挪(联想动态数组时我们实现的resize操作?),如何避免?

【A】在实际工程设计中,将数据转化为两部分的组合:
(1) 固定长度的<k,v>键值对。
(2)非固定长度meta元数据段。
(3)<k,v>键值对还存储了meta的起始位置。

为了提高buffer的利用率,考虑使用环形buffer,那么:
(1)index = 0处就相当于一条分割线,称为赤道(equator)。
(2)<k,v>和meta都以equator为起点,分别朝两个方向存放数据。
在这里插入图片描述
盗一张图,更加形象的表达
在这里插入图片描述
【效果】
(1)排序时仅需要调整<k,v>的顺序即可,极大减少内存腾挪。
(2)排序完成后,外部读取数据时,采用间接寻址能够以正确的顺序获取到完整的数据集合。

4 小结

本节着墨不多,但我认为只要图画的清楚,看图就能彻底领悟线性表的精髓:任意进出元素的巧用!当然,如果后续补全了树状数组话题的讨论(包括堆和树,特别是N叉树的代表B/B+树),整个知识体系正常看就完备了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

labview实现大小端交换移位

在解码时遇到了大小端交换的问题&#xff0c;需要把高低字节的16进制值进行互换&#xff0c;这里一时间不知道怎么操作&#xff0c;本来打算先把16进制转字节数组&#xff0c;算出字节数组的大小&#xff0c;然后通过模2得到0&#xff0c;1&#xff0c;来判断是否为奇数位和偶数…

在Windows系统上安装和配置Redis服务

&#x1f31f; 在Windows系统上安装和配置Redis服务 Redis是一个高性能的键值存储数据库&#xff0c;广泛用于缓存、消息队列和实时分析等场景。虽然Redis最初是为Linux设计的&#xff0c;但也有Windows版本可供使用。今天&#xff0c;我将详细介绍如何在Windows系统上安装Red…

Ateme在云端构建可扩展视频流播平台

Akamai Connected Cloud帮助Ateme客户向全球观众分发最高质量视频内容。 “付费电视运营商和内容提供商现在可以在Akamai Connected Cloud上通过高质量视频吸引观众&#xff0c;并轻松扩展。”── Ateme首席战略官Rmi Beaudouin ​ Ateme是全球领先的视频压缩和传输解决方案提…

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

&#x1f31f;前言: 在软件开发、项目管理和系统设计等领域&#xff0c;图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及&#xff0c;我们现在可以更轻松地创建各种专业图表。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&…

时序数据库TimescaleDB基本操作示例

好的&#xff01;以下是使用 TimescaleDB 的 Java 示例&#xff08;基于 JDBC&#xff0c;因为 TimescaleDB 是 PostgreSQL 的扩展&#xff0c;官方未提供独立的 Java SDK&#xff09;&#xff1a; 1. 添加依赖&#xff08;Maven&#xff09; <dependency><groupId&g…

C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用

文章目录 1. CopyFile原理函数原型返回值用法示例适用场景 2. CopyFileEx原理函数原型返回值用法示例适用场景 3. 核心区别4. 选择建议5. 常见问题6.区别 在Windows系统编程中&#xff0c;CopyFile和CopyFileEx是用于文件复制的两个API函数。它们的核心区别在于功能扩展性和控制…

浙江大学:DeepSeek行业应用案例集(153页)(文末可下载PDF)

浙江大学&#xff1a;DeepSeek行业应用案例集&#xff08;153页&#xff09;&#xff08;文末可下载PDF&#xff09; 全文链接&#xff1a;浙江大学&#xff1a;DeepSeek行业应用案例集&#xff08;153页&#xff09;&#xff08;文末可下载PDF&#xff09; | AI探金 全文链接&…

入门到入土,Java学习 day16(算法1)

利用循环遍历来判断是否相等 二分查找/折半查找 前提条件&#xff1a;数组中的数据有序 每次排除一般的查找范围 用min,max,mid来处理&#xff0c;最大加最小除2&#xff0c;比较&#xff0c;然后得到在中间左边还是右边然后更新最大最小 public class Two {// 二分查找方法…

mysql-8.0.41-winx64 手动安装详细教程(2025版)

mysql-8.0.41-winx64 手动安装详细教程&#xff08;2025版&#xff09; 一、下载安装包二、配置环境变量三、安装配置四、启动 MySQL 服务&#xff0c;修改密码 一、下载安装包 安装地址如下&#xff1a; https://dev.mysql.com/downloads/mysql/使用7-zip或其他解压软件&…

Flink深入浅出之03:状态、窗口、checkpoint、两阶段提交

Flink是一个有状态的流&#xff0c;&#x1f445;一起深入了解这个有状态的流 3️⃣ 目标 掌握State知识掌握Flink三种State Backend掌握Flink checkpoint和savepoint原理了解Flink的重启策略checkpointtwo phase commit保证E-O语义 4️⃣ 要点 &#x1f4d6; 1. Flink的St…

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战&#xff1a;从李牧到八路军的智谋传承 李牧戍边&#xff1a;古代军事博弈中的资源重构 八路军的游击战&#xff1a;现代战争中的智慧延续 二、创业界的逆袭之道&#xff1a;小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …

网页打印很简单!用web打印插件lodop轻松实现文件打印

最近&#xff0c;给客户发一个事件提醒软件&#xff0c;其中客户要求实现打印功能&#xff0c;因为是用asp.net mvc 开发首先考虑到用水晶报表来实现&#xff08;crystalReport&#xff09;&#xff0c;以前开发c# winform程序&#xff0c;感觉水晶报表还是蛮好的&#xff0c;但…

Claude、ChatGPT、Gemini等主流AI模型。分别详细介绍它们并进行对比,需要指出关键的时间点

以下是关于Claude、ChatGPT和Gemini三大主流AI模型的详细介绍及对比分析&#xff0c;结合关键时间点和核心技术特征&#xff1a; 1. Claude&#xff08;Anthropic&#xff09; 关键时间点与版本迭代 2023年3月&#xff1a;初代Claude发布&#xff0c;定位为安全可控的对话模型…

统计登录系统10秒内连续登录失败超过3次的用户

为防止暴力破解用户账号的行为&#xff0c;在输入账号和密码时一般都会限制用户尝试密码输出错误的次数&#xff0c;如果用户多次输错密码后&#xff0c;将在一段时间内锁定账号&#xff0c;常见的有银行类APP、个税App等应用&#xff0c;如下是用户账号密码输入错误的提示图&a…

vue3通过render函数实现一个菜单下拉框

背景说明 鼠标移动到产品服务上时&#xff0c;出现标红的下拉框。 使用纯css的方案实现最简单&#xff0c;但是没什么技术含量&#xff0c;弃之&#xff1b;使用第三方组件库&#xff0c;样式定制麻烦弃之。因此&#xff0c;我们使用vue3直接在页面创建一个dom作为下拉框吧。…

二、重学C++—C语言核心

上一章节&#xff1a; 一、重学C—C语言基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146002496?spm1001.2014.3001.5502 本章节代码&#xff1a; cPart2 CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/…

几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结

在 PyCharm 中创建虚拟环境是一个非常直接的过程&#xff0c;可以帮助你管理项目依赖&#xff0c;确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置&#xff1a; 在 Windows/Linux 上&#xff0c;可以通过点击…

Windows系统编程项目(四)窗口管理器

本章我们讲解基于对话框的MFC窗口相关的操作 该管理器要实现以下功能 初始化列表 初始化列表表头 初始化图像列表 初始化列表 功能实现 加载菜单 刷新列表 结束进程 隐藏窗口 最大化窗口 最小化窗口 手搓窗口管理器 // CWindowManage.cpp: 实现文件 //#include "pch.h&…

大模型架构记录4-文档切分 (chunks构建)

chunks&#xff1a; 块 trunks : 树干 “RAG”通常指 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09; 主要框架&#xff1a;用户提query&#xff0c;找到和它相关的&#xff0c;先把问题转换为向量&#xff0c;和向量数据库的数据做比较&#xff0c;检…

物联网IoT系列之MQTT协议基础知识

文章目录 物联网IoT系列之MQTT协议基础知识物联网IoT是什么&#xff1f;什么是MQTT&#xff1f;为什么说MQTT是适用于物联网的协议&#xff1f;MQTT工作原理核心组件核心机制 MQTT工作流程1. 建立连接2. 发布和订阅3. 消息确认4. 断开连接 MQTT工作流程图MQTT在物联网中的应用 …