数据结构C++ 栈——栈的应用
application.h :
#pragma once #include <iostream>//括号匹配问题 void matchingPairs(std::string pairsString);//汉诺塔问题 void Hanoi(int amount);//列车车厢重排问题 bool Arrange(int order[], int ordered[], int carNum, int stackNum);//开关盒布线问题 bool checkBox(int Box[], int Num);
application.cpp :
#include "application.h" #include "listStack.h"void matchingPairs(std::string pairsString) {listStack<int> Pairs;for (int i = 0; i < pairsString.size(); i++){if (pairsString[i] == '(') //遇到 '(' 进栈 {Pairs.push(i);}else if (pairsString[i] == ')') //遇到 ')' 出栈 {try{std::cout << Pairs.top() << " " << i << std::endl;Pairs.pop();}catch (stackEmpty){std::cout << "Stack is empty, Not have matching right Pairs at " << i << std::endl;}}}while (!Pairs.empty()){std::cout << "Stack is empty, Not have matching left Pairs " << Pairs.top() << std::endl;Pairs.pop();} }void moveHanoi(int amount, listStack<int> &sce, listStack<int> &des, listStack<int> &tmp) {if (amount <= 0)return;moveHanoi(amount - 1, sce, tmp, des); //先将盘子移动到 第三座塔 上int plate = sce.top();des.push(plate);sce.pop();moveHanoi(amount - 1, tmp, des, sce); //再从第三座塔移动到 目标塔 上 }void Hanoi(int amount) {listStack<int> HanoiStack[3]; //HanoiStack[0],HanoiStack[1],HanoiStack[2]分别代表三座塔for (int i = amount; i > 0; i--) //0号塔 的初始化,“将盘子串在第一座塔上” {HanoiStack[0].push(i);}moveHanoi(amount, HanoiStack[0], HanoiStack[1], HanoiStack[2]); //将 0号塔 上的盘子移动到 1号塔 上 }int minCar; //缓冲轨道上编号最小的车厢 int minCarInStack; //缓冲轨道上编号最小的车厢所在的轨道号bool fromOrderToStack(int car, listStack<int>* &Stack, int stackNum, int carNum) {int bestStack = -1, bestTop = carNum + 1;for (int i = 0; i < stackNum; i++) //轨道为空 {if (Stack[i].empty()){if (bestStack == -1)bestStack = i;}else //轨道不为空 {int stackTop = Stack[i].top();if (car < stackTop && stackTop < bestTop){bestTop = stackTop;bestStack = i;}}}if (-1 == bestStack)return false;Stack[bestStack].push(car); //车厢放入最合适的缓冲轨道内if (car < minCar) //更新变量 {minCar = car;minCarInStack = bestStack;}return true; }void fromStackToOrdered(listStack<int>* &Stack, int stackNum, int ordered[], int &nextCar, int carNum) {int stackTop = Stack[minCarInStack].top();Stack[minCarInStack].pop();ordered[nextCar - 1] = stackTop;minCar = carNum + 1;for (int i = 0; i < stackNum; i++){if (!Stack[i].empty() && Stack[i].top() < minCar){minCar = Stack[i].top();minCarInStack = i;}} }bool Arrange(int order[], int ordered[], int carNum, int stackNum) {listStack<int> *Stack = new listStack<int>[stackNum];int nextCar = 1; //下一个该几号车厢minCar = carNum + 1;for (int i = 0; i < carNum; i++){if (order[i] == nextCar) //直接放到出轨道 { 9,5,7,3,2,8,4,1,6 }; {ordered[nextCar - 1] = order[i];nextCar++;while (minCar == nextCar && nextCar <= carNum){fromStackToOrdered(Stack, stackNum, ordered, nextCar, carNum);nextCar++;}}else //将车厢放到缓冲轨道 {if (!fromOrderToStack(order[i], Stack, stackNum, carNum))return false;}}delete[] Stack;return true; }bool checkBox(int Box[], int Num) {listStack<int> Stack;for (int i = 0; i < Num; i++){if (Stack.empty())Stack.push(Box[i]);else{if (Stack.top() == Box[i])Stack.pop();elseStack.push(Box[i]);}}if (!Stack.empty()){std::cout << "该开关盒布线方案无法实现" << std::endl;return false;}std::cout << "该开关盒布线方案可实现" << std::endl;return true; }
转载于:https://www.cnblogs.com/peformer/p/8029416.html
数据结构C++ 栈——栈的应用相关推荐
- 数据结构之【栈】的基本操作C语言实现
引题: 很多人都把[栈]描述成[弹匣],但我总感觉有点不恰当,因为弹匣从上端[装弹]之后,子弹总是在匣的上层:而元素[进栈]之后,总在栈的下面. 我觉得还是描述成[从下往上 ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- sdut 1479 数据结构实验之栈与队列九:行编辑器
数据结构实验之栈与队列九:行编辑器 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...
- sdut 3335 数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...
- sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...
- sdut 2134 数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 数据结构与算法 -- 栈 ADT
这两天翻了下数据结构与算法分析.严蔚敏的数据结构.C和指针.C Primer Plus这些本书,受益很多.不过大多的示例不够完整,需要自己动手编写程序.又看了遍培训时的笔记,虽然很糙但是精华的部分还是 ...
最新文章
- 独家 | Tableau小技巧之分离Box plot和Unit Histogram(附链接)
- 小憩,味一二 ——08年3月编程手札
- SED单行脚本快速参考(Unix流编辑器)
- sklearn模型的训练(下)
- java流行的测试框架调研+市面上书籍调研
- 算法题学到的一些小语言细节
- 05 | 前馈网络与反向传播:模型的自我学习(下)
- 面试:MySQL 架构
- 详解如何在vue项目中引入饿了么elementUI组件
- [转]取本页URL地址的方法是(总结):
- 智能优化算法应用:基于麻雀搜索算法的TSP问题求解 - 附代码
- 【作业锦集】机器人学导论-空间变换及Matlab实现(part-2)
- [从零开始学习FPGA编程-5]:快速入门篇 - 操作步骤1 - FPGA工作原理(从硬件资源整合的角度看FPGA编程)
- 驱动精灵修复服务器,驱动精灵一键修复系统组件工具
- 屌丝变身海归精英?揭秘芝麻信用分黑色产业链
- VR全景智慧城市虚拟现实三维的发展
- 解决:wordpress 安装主题时,要求FTP
- ​从ASML年报看半导体产业的未来
- html铺满整个页面_html 怎么让背景图铺满整个页面?
- 分享2020年线上支付接口产品讲解
热门文章
- 关于raw_input()和sys.stdin.readline()的区别
- 3D物理引擎JiglibFlash
- 【博客管理】短期长期计划【置顶】
- OpenCV 实现分水岭算法
- 【OpenCV学习笔记】【教程翻译】二(车牌识别算法框架)
- 智能优化算法:学生心理学优化算法 -附代码
- 微波遥感SNAP(三)——检测地表沉降(1)自动化处理(Graph Builder)
- java二叉树的遍历,递归与非递归方法
- python 获取内存使用率_获取一个python实例的总内存和cpu使用率
- Java设计模式笔记------设计原则完结