目录

  • 前言
  • 一、原题
  • 二、解题思路
  • 三、代码实现(c/c++)
    • C语言代码
    • C++代码实现
  • 结语

前言

目前博主在处于秋招求职的关键时期,在暑假这段时间会频繁更新博客,想在暑假期间把一些常考的面试和笔试题过一下,利用这两个月沉淀一下技术,做出一,两个比较大的项目,然后就是封装一下简历,开始投递了,我期待与26届所有毕业生一起学习共同进步。

在这里插入图片描述

一、原题

在这里插入图片描述

二、解题思路

1.s1用作入队栈,s2用作出队栈。

2.s1入队时,判断两个栈是否栈满了,如果满就算入队失败;如果s1满了,就将s1里的元素出栈入栈到s2,同时也要判断s2是否满了,如果满了就结束s1出栈,s2入栈这个操作,最后s1插入元素。

3.s2出队时,判断两个栈是否为空,如果为空就出队失败;如果s2为空,就将s1所有元素出栈入栈到s2,最后出栈元素。

三、代码实现(c/c++)

C语言代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>#define MaxSize 10
typedef int DataType_t;typedef struct {DataType_t data[MaxSize];size_t top;
} Stack;typedef struct {Stack s1;Stack s2;
} Queue;void InitStack(Stack* stack) {stack->top = 0;
}bool IsFull(Stack* stack) {return stack->top == MaxSize;
}bool IsEmpty(Stack* stack) {return stack->top == 0;
}bool Push(Stack* stack, DataType_t val) {if (IsFull(stack)) {printf("栈满,插入元素失败\n");return false;}stack->data[stack->top++] = val;return true;
}bool Pop(Stack* stack, DataType_t* val) {if (IsEmpty(stack)) {printf("栈空,弹出元素失败\n");return false;}*val = stack->data[--stack->top];return true;
}void InitQueue(Queue* queue) {InitStack(&queue->s1);InitStack(&queue->s2);
}bool IsQueueEmpty(Queue* queue) {return IsEmpty(&queue->s1) && IsEmpty(&queue->s2);
}bool IsQueueFull(Queue* queue) {return (queue->s1.top + queue->s2.top) == MaxSize;
}bool Enque(Queue* queue, DataType_t val) {if (IsQueueFull(queue)) {printf("队满,入队失败\n");return false;}DataType_t temp;if (IsFull(&queue->s1)) {while (!IsEmpty(&queue->s1) && !IsFull(&queue->s2)) {Pop(&queue->s1, &temp);Push(&queue->s2, temp);}}return Push(&queue->s1, val);
}bool Deque(Queue* queue, DataType_t* val) {if (IsQueueEmpty(queue)) {printf("队空,出队失败\n");return false;}DataType_t temp;if (IsEmpty(&queue->s2)) {while (!IsEmpty(&queue->s1)) {Pop(&queue->s1, &temp);Push(&queue->s2, temp);}}return Pop(&queue->s2, val);
}

C++代码实现

#include <iostream>
using namespace std;const int MAX_SIZE = 100; // 栈的最大容量// 栈结构定义
struct Stack {int data[MAX_SIZE];int top = -1; // 栈顶指针,初始为-1
};// 栈操作函数
void push(Stack &ST, int x) {if (ST.top < MAX_SIZE - 1) {ST.data[++ST.top] = x; // 栈顶指针先加1,再入栈}
}bool pop(Stack &ST, int &x) {if (ST.top == -1) return false; // 栈空,弹出失败x = ST.data[ST.top--]; // 取栈顶元素,指针减1return true;
}bool isEmpty(Stack &ST) {return ST.top == -1; // 栈空返回 true
}// 队列结构(由两个栈组成)
struct Queue {Stack s1, s2;
};// 元素入队列
bool enQueue(Queue &q, int x) {if (q.s1.top == MAX_SIZE - 1) {// s1 已满,尝试转移元素到 s2if (!isEmpty(q.s2)) return false; // s2 非空,队列满,入队失败// 将 s1 的所有元素转移到 s2(逆序)while (!isEmpty(q.s1)) {int temp;pop(q.s1, temp);push(q.s2, temp);}}push(q.s1, x); // 新元素压入 s1return true;
}// 元素出队列
bool deQueue(Queue &q, int &x) {if (!isEmpty(q.s2)) { // s2 非空,直接弹出pop(q.s2, x);return true;}// s2 为空,转移 s1 的元素到 s2while (!isEmpty(q.s1)) {int temp;pop(q.s1, temp);push(q.s2, temp);}if (isEmpty(q.s2)) return false; // 转移后仍为空,队列空pop(q.s2, x); // 弹出 s2 栈顶(即队首)return true;
}// 判断队列是否为空
bool queueEmpty(Queue &q) {return isEmpty(q.s1) && isEmpty(q.s2); // 两栈均空时队列为空
}int main() {Queue q;// 测试用例enQueue(q, 1);enQueue(q, 2);enQueue(q, 3);int x;deQueue(q, x); // 输出 1cout << "Dequeued: " << x << endl;deQueue(q, x); // 输出 2cout << "Dequeued: " << x << endl;cout << "Queue empty? " << queueEmpty(q) << endl; // 输出 0(非空)return 0;
}

结语

在做项目之前,我们的基础一定要打扎实,尤其是,这些简单的线性数据结构,你们学到后面会发现,好多存储结构都逃不掉,顺序存储结构和链式存储结构,一定要自己动手多敲,只有脑子有料,到后面做项目才会得心应手,否则你到后面根本学不下。

在这里插入图片描述

希望各位靓仔靓女点赞,收藏,关注多多支持,我们共同进步,后续我会更新更多的面试真题,你们的支持将是我前进最大的动力。

在这里插入图片描述

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

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

相关文章

【知识扫盲】tokenizer.json中的vocab和merges是什么?

在自然语言处理里&#xff0c;tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 库生成的&#xff0c;它是分词器配置的核心文件。这里面的 vocab 和 merges 是子词分词算法&#xff08;像 BPE 这种&#xff09;的重要构成要素。下面为你详细解释它们的作用和工作原理&…

【安卓笔记】RxJava的Hook机制,整体拦截器

0. 环境&#xff1a; 电脑&#xff1a;Windows10 Android Studio: 2024.3.2 编程语言: Java Gradle version&#xff1a;8.11.1 Compile Sdk Version&#xff1a;35 Java 版本&#xff1a;Java11 1. 使用场景 整个项目都是用了RxJava&#xff0c;需要对 整个/部分 项目…

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

再做项目时相信大家都会用到坐标转化,例如,我之前写的案例分享中的博客都用到过,之前总是找借口进行if else判断,虽然可以实现,但是比起坐标变换无论代码复杂程度还是运行速度都比较差,之前参加过曹大师的教学训练营,但是明显感觉到大佬写代码的逻辑性以及模块化能力都比…

数据库防止数组字符串序列化

请求接到数组["aa","bb"]后,后端需要转换成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他转换,在字段存入数据库后会["\"a…

若依框架文件上传返回路径端口错误 - Nginx代理环境下serverConfig.getUrl()获取端口异常

目录一 、问题描述二、问题现象三、问题根本原因3.1 代码分析3.2 问题核心四、解决方案五、总结一 、问题描述 在使用若依框架进行项目开发时&#xff0c;遇到了一个令人困扰的问题&#xff1a;文件上传功能在本地开发环境运行正常&#xff0c;但部署到服务器后&#xff0c;上…

使用PyInstaller打包 Python 工程

引言:大模型是个好工具,尽管好多内容都是拼凑的,但是整理学到的就是自己的。因工作需要隐藏python源代码,方法有PyInstaller 、Cpython等多种方法,PyInstaller更为常用,PyInstaller打包 Python 工程步骤整理如下: 一、确保系统环境准备就绪 安装 Python 和 pip 确认版本…

Python 程序设计讲义(1):PyCharm 安装教程

Python 程序设计讲义&#xff08;1&#xff09;&#xff1a;PyCharm 安装教程 一、安装 Python 解释器 1、下载 Python 安装文件 点击如下链接进入 Python 官网&#xff1a; https://www.python.org/ 在弹出的页面中单击【Downloads】&#xff0c;然后单击下面的【Download Pyt…

uniapp云打包安卓

1、基础云打包 2、修改logo3、怎么实现下拉菜单4、修改启动页启动页默认这样 5、URL Scheme页面跳转

Python----NLP自然语言处理(英文分词器--NLTK)

一、NLTK_介绍NLTK&#xff08;Natural Language Toolkit&#xff0c;自然语言处理工具包&#xff09;&#xff0c;一个主要用于清洗和处理英文文本的Python工具包。它有很多的功能&#xff0c;我们主要使用的是它的分词功能&#xff0c;之前讲过中文分词是比较复杂的&#xff…

传统浏览器过时了?Dia如何用AI重新定义上网体验

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 传统浏览器过时了&#xff1f;Dia如何用AI重新定义上网体验它是什么核心功能搜索编程左右互动感谢…

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 1. 引言 在当今的互联网通信时代,实时语音通信已成为人们日常生活中不可或缺的一部分。然而,语音通信质量常…

Attu-Milvus向量数据库可视化工具

本文介绍了如何安装可视化工具Attu&#xff0c;包括使用Docker镜像启动并访问Attu服务。 目录 前言 一、Attu安装 1. Docker容器安装 2. 桌面程序安装 二、使用 Milvus Web U 前言 Attu是一款专为Milvus向量数据库打造的开源数据库管理工具&#xff0c;提供了便捷的图形化…

高效检测数据突变的MDAM算法详解

在数据分析领域&#xff0c;我们经常需要检测数据序列中的异常变化。今天给大家介绍一种简单但非常有效的算法——MDAM (Mean Drift Accumulation Monitor)&#xff0c;它能帮你轻松发现数据中的均值突变现象&#xff01;1. &#x1f50d; 算法原理累计数均值突变检测算法(MDAM…

记录一道sql面试题3

题目&#xff1a;有一张表a,和一张表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提问&#xff1a;将a和b两张表左连接查询&#xff0c;条件是a.id b.id会得到什么结果。查询的字段为a.*,b.* 。说明&#xff1a;左表 a 中 id1 …

linux系统------LVS+KeepAlived+Nginx高可用方案

目录 一、环境搭建 1.环境准备 2.安装ipvsadm 和 安装 keepalived&#xff08;Lvs服务器&#xff09; 3.为两台RS配置虚拟ip&#xff08;nginx服务器&#xff09; 1.配置虚拟网络子接口&#xff08;回环接口&#xff09; 2.修改内容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能优化实战指南:释放数据库潜能的艺术

文章目录MySQL性能优化实战指南&#xff1a;释放数据库潜能的艺术&#x1f680; 引言为什么需要MySQL性能优化&#xff1f;&#x1f4cb; 性能优化基础知识MySQL性能瓶颈分析1. 硬件资源瓶颈2. MySQL内部瓶颈&#x1f3c6; 优化配置策略大全&#x1f4be; 内存配置优化InnoDB缓…

Unity 3D碰撞器

在Unity中&#xff0c;碰撞器&#xff08;Collider&#xff09;是用于检测物体之间碰撞的组件&#xff0c;它们定义了物体的物理边界。碰撞器与刚体&#xff08;Rigidbody&#xff09;配合使用&#xff0c;实现物理模拟。下面我将按您的要求&#xff0c;从碰撞器的种类、常用参…

Windows批处理实现带时间戳ping

windows环境 &#xff0c; 将以下代码保存为 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市规划:Python 空间数据初学者指南

安装和设置 在深入研究数据之前&#xff0c;我们需要准备好工具。设置 GeoPandas 及其必要的依赖项是第一步。 我们将在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空间数据有多种格式&#xff0c;但 GeoJSON 是常见且易于访问的格式。Ge…

力扣面试150题--环形子数组的最大和

Day 80 题目描述思路 初次做法&#xff1a;在昨天代码的基础上修改 计算普通子数组的最大和 使用动态规划计算以每个位置为起点的最大子数组和&#xff08;存储在 val 中&#xff09;&#xff0c;并更新全局最大值 rightmax。计算后缀和与前缀和 sum[i]&#xff1a;从位置 i 到…