栈先进后出,实现比较简单,只操作栈顶:
class StackX
{
private final int maxSize;
private final char[] stackArray;
private int top;
public StackX(int ms)
{
maxSize = ms;
stackArray = new char[maxSize];
top = -1;
}
public void push(char item)
{
stackArray[++top] = item;
}
public char pop()
{
return stackArray[top--];
}
public char peak()
{
return stackArray[top];
}
public boolean isEmpty()
{
return (top == -1);
}
public boolean isFull()
{
return (top == maxSize - 1);
}
}
应用1:反转字符:
class Reverse
{
private final String input;
private String output;
Reverse(String in)
{
input = in;
}
/**
* 反转字符
*
* @return String
*/
public String doReverse()
{
int stackSize = input.length();
StackX stackX = new StackX(stackSize);
for(int i = 0; i < input.length(); i++)
{
char chin = input.charAt(i);
stackX.push(chin);
}
output = "";
while (!stackX.isEmpty())
{
char chout = stackX.pop();
output = output + chout;
}
return output;
}
}
应用2:校验格式
class BracketChecker
{
private final String input;
BracketChecker(String in)
{
input = in;
}
/**
* 校验格式
*
* @return String
*/
public void check()
{
int stackSize = input.length();
StackX stackX = new StackX(stackSize);
for(int i = 0; i < input.length(); i++)
{
char chin = input.charAt(i);
switch(chin)
{
case '{':
case '[':
case '(':
stackX.push(chin);
break;
case '}':
case ')':
case ']':
if(!stackX.isEmpty())
{//表达式不匹配
char chpop = stackX.pop();
if((chin == '}' && chpop != '{') || (chin == ']' && chpop != '[') || (chin == ')' && chpop != '('))
{
System.out.println("ERROR RIGHT1 COMPLETE AT " + i);
}
}
else
{ //只有右扣号,没有左扣号
System.out.println("ERROR RIGHT HAVE NOT COMPLETE " + i);
}
break;
default:
break;
}
}
if(!stackX.isEmpty())
{
System.out.println("ERROR HAVE NOT RIGHT ");
}
}
}
注:以上代码均出自《Java数据结构和算法中文第二版》
分享到:
相关推荐
在这个"数据结构试验6-栈及其应用"中,我们将深入探讨一个重要的数据结构——栈,并研究其在实际问题中的应用。 栈是一种线性数据结构,遵循“后进先出”(LIFO,Last In First Out)的原则。它类似于我们日常生活...
**栈及其应用** 栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则。在栈中,最新添加的元素(称为顶部元素)是第一个被删除的元素。栈的操作主要有两个基本操作:压入(Push)和弹出(Pop)。压入操作...
在这个实验“数据结构栈及其应用实验二”中,主要的目标是设计并实现一个程序,用于在给定的迷宫中搜索从入口到出口的可行路径。迷宫被表示为一个二维矩阵,用1代表可行走区域,0代表障碍。迷宫的入口位于第一行第二...
数据结构栈及其应用PPT学习教案.pptx
基础数据结构实验与实验报告 【实验三】栈及其应用——迷宫问题 包含了完整的可以正确编译运行的C++源代码与实验报告(内含需求分析、概要设计与详细设计、时空复杂度分析、用户手册等)
栈在计算机科学中有着广泛的应用,特别是在算法实现、编译原理、操作系统等多个领域。 对于本实验而言,我们将重点学习栈的顺序存储结构和链式存储结构。顺序栈是指用一维数组来存储栈中的元素,它的优点是访问速度...
栈的应用广泛,包括括号匹配、递归算法、内存管理等。 栈的特性: 1. 定义:栈是一种只能在一端进行插入和删除操作的线性表,这一端被称为栈顶。 2. 逻辑结构:栈是线性的,元素有序排列,但插入和删除只在栈顶进行...
Zigbee协议栈是无线通信领域的一个重要组成部分,尤其在物联网(IoT)应用中扮演着关键角色。本文将深入探讨Zigbee协议栈的结构、功能、组网原理以及其在实际产品中的应用。 首先,我们要理解Zigbee协议栈的层级结构...
本课程设计的重点是探讨栈在解决实际问题,特别是表达式计算中的应用。 栈在表达式计算中的应用广泛,最常见的就是逆波兰表示法(Postfix Notation)或称后缀表达式。逆波兰表示法是一种没有括号的表达式表示方式,...
本实验报告重点探讨了栈的顺序存储结构及其在实际问题中的应用。 实验目标是让学生熟悉栈的基本特性和操作,包括入栈(Push)、出栈(Pop)、获取栈顶元素(Peek)等。在顺序存储结构中,栈通常用数组来实现,栈顶...
通过这个实验,学生能够深入理解栈数据结构的特性和操作,并学会如何将栈应用于实际问题中,尤其是理解栈在解决递归问题、表达式求值、编译器设计等多个领域的重要作用。此外,实验还锻炼了学生的编程能力,特别是在...
在这个实验报告中,我们主要关注栈的顺序存储结构及其在实际问题中的应用。 栈的基本操作包括入栈(Push)、出栈(Pop)、获取栈顶元素(Top)以及检查栈的状态(如是否为空或已满)。在顺序栈的实现中,通常使用...
栈的应用举例(栈与表达式) 处理表达式是高级语言的编绎中的一个基本问题。它的实现是栈的一个重要应用,通过对处理表达式的讨论,可以帮助我们进一步了解栈的性能。
### 栈和队列的基本操作实现及其应用实验报告 #### 实验目的 1. **熟练掌握栈和队列的基本操作**:在数组和链表两种存储结构上实现栈和队列的基本操作。 2. **应用栈和队列解决实际问题**:通过具体的编程练习,...
数据结构_实验三_栈和队列及其应用.pdf数据结构_实验三_栈和队列及其应用.pdf数据结构_实验三_栈和队列及其应用.pdf数据结构_实验三_栈和队列及其应用.pdf数据结构_实验三_栈和队列及其应用.pdf数据结构_实验三_栈和...
Educoder题目:数据结构-栈基本运算的实现及其应用答案解析.md
"匹配.cpp"文件的实现细节可能包括了具体的代码结构、错误处理和优化技巧,这些都是学习和理解栈及其应用的重要实践案例。通过深入理解这个问题,我们可以更好地掌握数据结构与算法在实际问题中的应用,提高编程能力...