栈的基本特性是后进先出,最简单的用途是用于转置,还有其他诸如括号匹配,中序表达式(A+B*(C-D/(E+F)) --> ABCDEF+/-*+)和后续表达式(345+*612+/- --> 3*(4+5)-6/(1+2))互换等高级用法。

示例代码:

package chap04.Reverse;

import java.io.*; // for I/Oclass StackX {private int maxSize;private char[] stackArray;private int top;public StackX(int max) {maxSize = max;stackArray = new char[maxSize];top = -1;}public void push(char j) {stackArray[++top] = j;}public char pop() {return stackArray[top--];}public char peek() {return stackArray[top];}public boolean isEmpty() {return (top == -1);}public boolean isFull() {return (top == maxSize - 1);}
}  class Reverser {private String input;  private String output;  public Reverser(String in) {input = in;}// 转置public String doRev() {int stackSize = input.length();  StackX theStack = new StackX(stackSize);  for (int j = 0; j < input.length(); j++) {char ch = input.charAt(j);  theStack.push(ch);  }output = "";while (!theStack.isEmpty()) {char ch = theStack.pop();  output = output + ch;  }return output;}
}  class ReverseApp {public static void main(String[] args) throws IOException {String input, output;while (true) {System.out.print("Enter a string: ");System.out.flush();input = getString1();  if (input.equals("")) {  break;}Reverser theReverser = new Reverser(input);output = theReverser.doRev(); System.out.println("Reversed: " + output);} } public static String getString1() throws IOException {InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);String s = br.readLine();return s;}
} 

转载于:https://www.cnblogs.com/thlzhf/p/4024427.html

Java数据结构与算法(3) - ch04栈(栈和转置)相关推荐

  1. Java数据结构和算法(四)——栈

    前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...

  2. 数据结构与算法(C++)– 栈(Stack)

    数据结构与算法(C++)– 栈(Stack) 1.栈是什么 后进先出(Last in, First out) push 入栈,pop 出栈,top栈顶 2.栈的实现 单链表:在单链表的前端插入实现 p ...

  3. 数据结构和算法(五)--栈(Stack)

    数据结构和算法(五)–栈(Stack) 什么是栈 栈是一种特殊的线性表,只能在一端进行操作 往栈中添加元素,一般叫做push,入栈 往栈中移除元素,一般叫做pop,弹栈/出栈(只能移除栈顶元素) 栈遵 ...

  4. 03_JavaScript数据结构与算法(三)栈

    JavaScript 数据结构与算法(三)栈 数组是一个线性结构,并且可以在数组的任意位置插入和删除元素. 但是有时候,我们为了实现某些功能,必须对这种任意性加以限制. 栈和队列就是比较常见的受限的线 ...

  5. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  6. JAVA数据结构与算法【简单介绍】

    前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...

  7. java算法概述,Java数据结构与算法基础(一)概述与线性结构

    Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...

  8. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  9. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  10. Java数据结构与算法(二)

    Java数据结构与算法(二) 第六章 递归 1 递归应用场景 2 递归的概念 3 递归调用机制 4 递归能解决什么样的问题 5 递归需要遵守的重要规则 6 递归-迷宫问题 6.1 迷宫问题 6.2 代 ...

最新文章

  1. Install Package and Software
  2. Mysql 连接查询
  3. 工作310:uni-初始获取数据onload
  4. 【 HDU - 1525 】Euclid's Game(较难找规律,玄学博弈,分析必败点必胜点)
  5. LeetCode 932. 漂亮数组(分治递归/循环)
  6. 使用抓包工具fiddler和apipost进行接口测试
  7. 开启服务器时启动线程
  8. gitlab部署、配置更改、备份及恢复
  9. (三)Mybatis类型转换器,接口传参类型,一对一,一对多查询resultMap配置
  10. 如何使用Airdrop将视频从Mac发送到iPhone?
  11. 手机站的拨打电话和发短信
  12. .git文件过大,如何清理
  13. go Test Benchmark 性能测试
  14. 彩虹仿优云宝模板,最新彩虹代shua网仿优云宝发卡网模板
  15. 经济统计学专业学C语言,经济统计学专业有哪些课程
  16. 1500个工作计划总结PPT模板免费下载网址
  17. 最详细教程:Zotero和Better BibTeX安装,以及如何在R markdown中引用文献
  18. gitlab runner 使用案例
  19. IT运维和自动化运维以及运维开发有啥不同?能解释下吗?
  20. 【机器学习】逻辑斯蒂回归原理推导与求解

热门文章

  1. php mysql完整_BBS(php mysql)完整版(七)
  2. 信号量(semaphore)
  3. Redis,唯快不破!
  4. 内核抢占机制(preempt)
  5. Linux虚拟文件系统之文件系统安装(sys_mount())
  6. P-Called-Party-ID头域
  7. pandas groupby 用法详解
  8. Path Sum Path Sum II
  9. 你应该知道的RPC原理
  10. 【思维、费马小定理】CQXYM Count Permutations