【数据结构】——栈、队列简答题模板

目录

  • 一、栈
    • (一)栈的基本概念
    • (二)栈的应用
    • (三)栈的代码实现
    • (四)递归算法
    • (五)栈与队列的区别
  • 二、队列
    • (一)队列的基本概念
    • (二)队列的应用
    • (三)循环队列的基本概念

一、栈

(一)栈的基本概念

1、简述栈的特性。

:栈是被限制存取点的线性表,只允许在一端进行插入或删除操作,栈遵循的原则是先进后出(FILO),即后进的元素先被取出来。

(二)栈的应用

1、栈有哪些应用场景?(试举例至少三种)

:栈有以下应用场景:
①递归及函数调用;
②表达式求值(例如,中后缀表达式、括号匹配等等);
③进制转换(例如,十进制数转为二进制数等等);
④迷宫求解;
⑤缓存机制;
⑥用栈对二叉树进行前、中、后序遍历;
⑦用栈模拟队列。

2、栈的操作原则是什么?举出两个栈的应用例子。

:栈的操作原则是先进后出,例如用栈对二叉树进行前、中、后序遍历以及用栈模拟队列等等。

3、简述用两个栈模拟一个队列的基本思想。

:首先,定义两个栈S1和S2,将所有元素依次入栈S1,然后再依次出栈并进入栈S2,再从栈S2出栈。

(三)栈的代码实现

1、写出顺序存储结构的顺序栈的结构体、栈空、栈满、进栈及出栈的关键代码。

:①顺序栈的结构体:

#define MaxSize 20	//可自行设置
typedef struct {int data[MaxSize];	//存放栈中元素 ,使用数组int top;	//栈顶指针 ,记录栈顶元素的位置 
} SqStack;	//顺序栈的类型定义 

②判断顺序栈是否为空栈的条件是S.top==-1。
③判断顺序栈是否为满栈的条件是S.top==MaxSize-1。
④将一个元素插入顺序栈中,即进栈,

++S.top;	//top指针始终指向栈顶,新的元素进栈,所以指针先加1
S.data[S.top]=x;	//将进栈元素的值传入并入栈

这两行代码也可以使用一行代码:S.data[++S.top]=x直接替换。
⑤将一个元素从顺序栈中删除,即出栈,

x=S.data[S.top];	//出栈
S.top--;	//指针减1

这两行代码也可以使用一行代码:x=S.data[S.top–]直接替换。

(四)递归算法

1、递归算法包括哪两个部分?简述递归的步骤。

:一个递归算法必须包括终止条件和递归部分,当递归的条件不满足时,此时递归结束返回,否则继续进行递归操作。

2、简述递归算法的优缺点。

:递归算法的代码简洁明确,其可读性好,但是其时间复杂度和空间复杂度较大,且在调用栈时可能会产生溢出。

(五)栈与队列的区别

1、简述栈和队列的相同点和不同点。

:①不同点:运算规则不同,栈遵循的原则是先进后出,而队列的原则是先进先出,栈只允许在一端进行插入、删除操作,而队列只允许在一端进行插入、另一端进行删除操作。另外,两个用途不同,栈由于子程序调用和保护现场,而队列用于多道作业处理、指令寄存及其他运算等等;
②相同点:都是操作受限的线性表,逻辑结构相同,且存储表示也相同(顺序存储结构和链式存储结构)。

二、队列

(一)队列的基本概念

1、队列的“先进先出”的特性是指什么?

:队列遵循的原则是先进先出,其特性是指最后插入队列中的元素总是最后被删除。

(二)队列的应用

1、队列有哪些应用?

:队列的应用场景有以下:
(1)缓冲区(例如计算机与打印机中间的打印数据缓冲区);
(2)页面替换算法;
(3)图的广度优先搜索、树的层次遍历,都借助到了队列的基本思想。

(三)循环队列的基本概念

1、怎么解决队列“假溢出”的问题?并写出相关的代码。

:将存储队列的一维数组首尾相连成环,形成循环队列,其中队头指针、队尾指针加1时通过取余运算实现,从而防止队列的“假溢出”。进对针对队尾指针,即Q.rear=(Q.rear+1)%MAXSIZE,出队针对队头指针,即Q.front=(Q.front+1)%MAXSIZE。

2、什么是循环队列?给出循环队列中元素个数的计算式(设最大长度为N,队首指针FRONT,队尾指针REAR)。

:循环队列也就是将顺序队列中的一维数组首尾相连成环,即在逻辑上视为一个环连接起来,让队首指针和队尾指针沿着环走;循环队列中元素个数的计算式为(REAR-FRONT+N)%N。

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

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

相关文章

前端各种资源集合

文章目录 前端资料集👍在线工具字体图标SVG|PNG|ICO素材压缩工具特效素材插画素材检查测试 前端资料集 👍在线工具 CSS3贝塞尔曲线动画生成CSS Gradient渐变色生成SVG在线制作工具一个轻量级在线编辑器在线生成雪碧图在线JSON查看removebg在线抠图uupo…

python实现炒股自动化,个人账户无门槛量化交易的开始

本篇作为系列教程的引子,对股票量化程序化自动交易感兴趣的朋友可以关注我,现在只是个粗略计划,后续会根据需要重新调整,并陆续添加内容。 股票量化程序化自动交易接口 很多人在找股票个人账户实现程序化自动交易的接口&#xff0…

Coding面试题之手写线程池

原理图 JDK线程池原理 实现代码 1.线程类&#xff08;PoolThread&#xff09; 这个类用于执行任务队列中的任务。 public class PoolThread extends Thread {private final Queue<Runnable> taskQueue;private boolean isStopped false;private long lastTaskTime …

传奇世界如何添加新的装备

大家应该都知道传世所有的装备列表都是保存在StdItems.DB 物品数据库中&#xff0c;各种装备的属性等信息也是在这个数据库中来定义的&#xff0c;比如某个武器的攻击力&#xff0c;佩戴要求&#xff0c;外观都是在这个数据库中定义。 然后我们要修改或添加新的装备&#xff0…

老版本goland无法调试新版本go问题处理

背景 无法调试1.20版本b 报错如下&#xff1a; No goroutine selected 懒人不想升级goland版本。 处理方法 1.安装最新的dlv工具 go install github.com/go-delve/delve/cmd/dlvlatest 2.找到刚刚安装的dlv工具&#xff0c;并复制 # 位于$GOPATH的bin目录下&#xff0c;如…

人工智能基础_机器学习022_使用正则化_曼哈顿距离_欧氏距离_提高模型鲁棒性_过拟合_欠拟合_正则化提高模型泛化能力---人工智能工作笔记0062

然后我们再来看一下,过拟合和欠拟合,现在,实际上欠拟合,出现的情况已经不多了,欠拟合是 在训练集和测试集的准确率不高,学习不到位的情况. 然后现在一般碰到的是过拟合,可以看到第二个就是,完全就把红点蓝点分开了,这种情况是不好的, 因为分开是对训练数据进行分开的,如果来…

C语言 预处理详解

目录 1.预定义符号 2.#define 2.1#define 定义标识符 2.2#define 定义宏 2.3#define 替换规则 2.4#和## 2.4.1# 的作用 2.4.2## 的作用 2.5 带有副作用的宏参数 2.6宏和函数的对比 对比 **2.7内联函数 2.8命名约定 3.#undef **4.命令行定义 5.条件编译 常…

npm install 报错 chromedriver 安装失败的解决办法

npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver

ubuntu 内网源如何搭建 —— 筑梦之路

为什么要搭建内网源&#xff1f; 原因&#xff1a;内网开发环境由于其特定原因不能上外网&#xff0c;所以需要本地环境下的内网源来方便开发人员下载安装软件 搭建建议 单独使用一块磁盘来存放源文件或者单独一个目录下&#xff0c;避免混淆。 环境说明 ubuntu 系统 两张…

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:

错误描述如下所示&#xff1a; 我们将错误拉到最下面如下所示为导致异常的原因&#xff1a; Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type com.example.reviewmybatisplus.Service.UserService available: expec…

双编码器构建机器人零力拖动/导纳控制思路

前言 这篇博客主要记录昨日与实验室大佬针对UR5机器人拖动示教功能实现的思路。由于本人并非主攻力控方面。直到昨天在做实验的时候&#xff0c;与力控组的大佬讨论过后才了解UR机器人实现导纳控制的思路。 关于导纳控制/零力拖动 导纳控制与阻抗控制单从字面去理解很容易记…

PHP编写采集药品官方数据的程序

在 PHP 中编写爬虫程序&#xff0c;首先我们需要引入一些必要的库&#xff0c;如 curl 和 file_get_contents。然后&#xff0c;我们需要设置爬虫ip信息&#xff0c;以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…

CMake教程--QT项目使用CMake

CMake教程--QT项目使用CMake Chapter1 CMake教程--QT项目使用CMake1. Basic Cmake Based Project2. Executable VS Library3. Every module has its own CMakeList.txt in its folder3.1 不推荐的做法&#xff1a;3.2 推荐的做法 4. 强制以Debug, Release, RelWithDebInfo, Min…

[游戏中的图形学实时渲染技术] Part1 实时阴影技术

原理篇&#xff1a; 常见的渲染方程如下&#xff1a; &#xfffd;&#xfffd;(&#xfffd;,&#xfffd;&#xfffd;) &#xfffd;&#xfffd;(&#xfffd;,&#xfffd;&#xfffd;) ∫Ω&#xfffd;&#xfffd;(&#xfffd;,&#xfffd;&#xfffd;)&#xf…

Hls学习(一)

1&#xff1a;CPU、DSP、GPU都算软件可编程的硬件 2&#xff1a;dsp在递归方面有所减弱&#xff0c;在递归方面有所增强&#xff0c;比如递归啊等&#xff0c;GPU可以同时处理多个进程&#xff0c;对于大块数据&#xff0c;流处理比较适用 3&#xff1a;为了提高运算量处理更多…

HTTPS安全相关-通信安全的四个特性-ssl/tls

230-TLS是什么 1.http不安全 由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任何人都能够在链路中截获、修改或者伪造请求 / 响应报文&#xff0c;数据不具有可信性 &#xff1b; “代理服务”。它作为 HTTP 通信的中间人&#xff0c;在数据上下…

暖手宝+充电宝设计方案 可实现快速升温和充电 低成本充电电流可选

充电暖手宝因为它的便携性&#xff0c;既能供暖又能当充电宝使用而备受人们喜爱。是冬天暖手供暖的必备神器。 目前&#xff0c;市场常见的暖手宝大致有三个类型&#xff0c;分别是加热水的热水袋、通过化学反应放热的铁粉袋子和锂电供电的智能暖手宝。与常见的暖手宝不同&…

巨好用又实用的18款3dMax插件!

3dMax是一款功能强大的 3D 软件&#xff0c;具有建模、动画、粒子动力学等许多强大功能。但并不是每个人都能有效地利用max的每一个功能&#xff0c;例如&#xff0c;很多人发现3dmax粒子流太难使用&#xff0c;3ds max蒙皮工具也是如此。 这让我们一些专业的开发公司或个人和…

Python学习笔记--自定义类型的枚举

三、自定义类型的枚举 但有些时候我们需要控制枚举的类型&#xff0c;那么我们可以 Enum 派生出自定义类来满足这种需要。通过修改上面的例子&#xff1a; #!/usr/bin/env python3 # -*- coding: UTF-8 -*- from enum import Enum, uniqueEnum(Month, (Jan, Feb, Mar, Apr, M…

配置cuda和cudnn出现 libcudnn.so.8 is not a symbolic link问题

cuda版本为11.2 问题如图所示&#xff1a; 解决办法&#xff1a; sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.1 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 sudo ln -sf /usr/local/cuda-11.2/targ…