07 C# 栈和队列的应用举例

news/2024/9/22 19:40:34/

栈和队列的区别和相同之处1

编程判断一个字符串是否是回文。回文是指一个字符序列以中间字符为基准两边字符完全相同,如字符序列“ACBDEDBCA是回文。

算法思想:判断一个字符序列是否是回文,就是把第一个字符与最后一个字符相比较,第二个字符与倒数第二个字符比较,依次类推,第i个字符与第n-i个字符比较。如果每次比较都相等,则为回文,如果某次比较不相等,就不是回文。因此,可以把字符序列分别入队列和栈,然后逐个出队列和出栈并比较出队列的字符和出栈的字符是否相等,若全部相等则该字符序列就是回文,否则就不是回文。

判断一个字符串是否是回文

using System;
using System.Collections.Generic;namespace _04_StackQueueApplications
{class Program{static void Main(string[] args){string str = Console.ReadLine();//Create a stackStack<char> stack = new Stack<char>();//Create a QueueQueue<char> queue = new Queue<char>();//Put the characters into the stack and into the queue separatelyfor (int i = 0; i < str.Length; i++){stack.Push(str[i]);queue.Enqueue(str[i]);}bool isHui = true;while (stack.Count > 0){if (stack.Pop()!=queue.Dequeue()){isHui = false;break;}}Console.WriteLine("Is it a HuiString:" + isHui);Console.ReadKey();}}
}

栈应用:实现递归算法

在编写一些算法时,我们经常会使用递归的方式来解决问题。递归算法中,函数调用自身,直到满足某个条件才停止递归。在这个过程中,实际上是使用了一个栈来保存每次调用时的参数和局部变量。

例如,计算一个整数的阶乘可以使用递归算法:

int Factorial(int n)
{if (n == 0){return 1;}else{return n * Factorial(n - 1);}
}

在递归过程中,每次调用都会将参数 n 和局部变量压入栈中,直到满足 n == 0 的条件。

队列应用:实现消息队列

在一些系统中,我们需要将消息队列化,按顺序进行处理,用于异步处理或者分布式处理等情况。消息队列可以使用队列来实现,每当一个消息到来时,我们将其添加到队列的尾部,等待后续的处理。后续的处理程序从队列的头部取出消息进行处理。这个过程也叫作异步处理或者事件驱动设计。

例如,消息队列可以应用于分布式系统之间的通信。当某个分布式系统需要发送消息给其他系统时,将消息放入消息队列中,接收系统从消息队列中取出消息进行处理,避免了直接的接口调用和数据传输等问题。


参考


  1. 栈和队列的区别和相同之处

    栈(Stack)和队列(Queue)都是常用的数据结构,它们之间有以下区别和相同之处:

    队列
    顺序后进先出(LIFO)先进先出(FIFO)
    插入操作入栈(push)入队(enqueue)
    删除操作出栈(pop)出队(dequeue)
    应用场景
    递归函数调用、表达式
    计算、程序运行、常用于括号匹配、函数调用等场景等需要按顺序处理数据的情况
    操作只能从栈顶进行插入和删除操作只能从队头队尾进行插入和删除操作
    存储方式均采用数组或链表等方式存储数据 ​

    栈和队列是常用的数据结构之一,两者的区别主要在于插入删除元素的方式和使用场景。栈可以理解为一个压缩盒子,最后放进去的元素最先拿出来,适用于后进先出的需求,比如函数调用栈等;而队列可以理解为一条排队的队伍,先进去的元素最先出来,适用于先进先出的需求,比如任务调度等。在实际应用中,我们可以根据不同的需求选择使用栈或者队列,比如实现撤销、回退等操作可以借助栈的特性,而等待队列、消息队列等场景则需要使用队列来实现。

    ‍ ↩︎


http://www.ppmy.cn/news/38684.html

相关文章

2023年全国最新保安员精选真题及答案42

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 421.根据《保安服务管理条例》规定&#xff0c;取得《保安员证》的身体条件是&#x…

ChatGPT体验地址,超多功能,附公众号源码

GPT说明效果演示地址体验公众号源码说明 ChatGPT是一种基于深度学习的自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;它可以实现自然的文字对话。ChatGPT是基于预训练的语言模型&#xff0c;使用大量的数据和计算资源进行训练&#xff0c;使其能够理解和生成自然语…

文献阅读:基于电压规避的汽车CAN入侵检测(二)

论文名称&#xff1a;Evading Voltage-Based Intrusion Detection on Automotive CAN 目录 论文背景和要点 CAN协议 总线通信 CAN消息框架 总线仲裁 错误处理 汽车的CAN总线上脆弱的ECU 基于电压的入侵检测系统 论文背景和要点 CAN协议 对于车内网CAN协议来说&#x…

【探花交友】day02—完善个人信息

目录 1、完善用户信息 1.1、阿里云OSS 1.2、百度人脸识别 1.3、保存用户信息 1.4、上传用户头像 2、用户信息管理 2.1、查询用户资料 2.2、更新用户资料 3、统一token处理 3.1、代码存在的问题 3.2、解决方案 3.3、代码实现 4、统一异常处理 4.1、解决方案 4.2、…

蓝桥杯最后一战

目录 分巧克力_二分 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码&#xff1a; 巧克力 - 优先队列 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码&#xff1a; 思路分析&#xff1a; 秘密行动_dp 蓝桥杯算法提高-秘密行动 题目描述 …

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架&#xff0c;它支持多种编程语言和浏览器&#xff0c;并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程&#xff0c;包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

【竞赛题】6362. 最长平衡子字符串

题目&#xff1a; 给你一个仅由 0 和 1 组成的二进制字符串 s 。 如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量&#xff0c;则认为 s 的这个子字符串是平衡子字符串。请注意&#xff0c;空子字符串也视作平衡子字符串。 返回 s 中最长的平衡子字符串长…

淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。

淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。 文章目录淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。本文导读1.分库分表2.数据冗余3.异步复制4.读写分离总结本文导读 淘宝的数据库架构设计采用了分布式数据库技术&#xff0c;通过…