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++ 栈——栈的应用相关推荐

  1. 数据结构之【栈】的基本操作C语言实现

    引题:        很多人都把[栈]描述成[弹匣],但我总感觉有点不恰当,因为弹匣从上端[装弹]之后,子弹总是在匣的上层:而元素[进栈]之后,总在栈的下面.        我觉得还是描述成[从下往上 ...

  2. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  3. sdut 2088 数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  4. sdut 1479 数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九:行编辑器 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  5. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  6. sdut 3333 数据结构实验之栈与队列六:下一较大值(二)

    数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...

  7. sdut-3332 数据结构实验之栈与队列五:下一较大值(一)

    数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...

  8. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  9. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  10. 数据结构与算法 -- 栈 ADT

    这两天翻了下数据结构与算法分析.严蔚敏的数据结构.C和指针.C Primer Plus这些本书,受益很多.不过大多的示例不够完整,需要自己动手编写程序.又看了遍培训时的笔记,虽然很糙但是精华的部分还是 ...

最新文章

  1. 独家 | Tableau小技巧之分离Box plot和Unit Histogram(附链接)
  2. 小憩,味一二 ——08年3月编程手札
  3. SED单行脚本快速参考(Unix流编辑器)
  4. sklearn模型的训练(下)
  5. java流行的测试框架调研+市面上书籍调研
  6. 算法题学到的一些小语言细节
  7. 05 | 前馈网络与反向传播:模型的自我学习(下)
  8. 面试:MySQL 架构
  9. 详解如何在vue项目中引入饿了么elementUI组件
  10. [转]取本页URL地址的方法是(总结):
  11. 智能优化算法应用:基于麻雀搜索算法的TSP问题求解 - 附代码
  12. 【作业锦集】机器人学导论-空间变换及Matlab实现(part-2)
  13. [从零开始学习FPGA编程-5]:快速入门篇 - 操作步骤1 - FPGA工作原理(从硬件资源整合的角度看FPGA编程)
  14. 驱动精灵修复服务器,驱动精灵一键修复系统组件工具
  15. 屌丝变身海归精英?揭秘芝麻信用分黑色产业链
  16. VR全景智慧城市虚拟现实三维的发展
  17. 解决:wordpress 安装主题时,要求FTP
  18. ​从ASML年报看半导体产业的未来
  19. html铺满整个页面_html 怎么让背景图铺满整个页面?
  20. 分享2020年线上支付接口产品讲解

热门文章

  1. 关于raw_input()和sys.stdin.readline()的区别
  2. 3D物理引擎JiglibFlash
  3. 【博客管理】短期长期计划【置顶】
  4. OpenCV 实现分水岭算法
  5. 【OpenCV学习笔记】【教程翻译】二(车牌识别算法框架)
  6. 智能优化算法:学生心理学优化算法 -附代码
  7. 微波遥感SNAP(三)——检测地表沉降(1)自动化处理(Graph Builder)
  8. java二叉树的遍历,递归与非递归方法
  9. python 获取内存使用率_获取一个python实例的总内存和cpu使用率
  10. Java设计模式笔记------设计原则完结