`
huhu_long
  • 浏览: 72463 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

栈的一些应用

阅读更多
大家都知道栈是先进后出的一种数据结构。。。

栈是运算受限的线性表(队列也一样), 其实现有顺序存储(数组)和链式存储(链表)两种实现方式。

由于栈的先进后出的特性, 使得它可以在很多场合下都可以大显身手:

1. 数制转换, 比如十进制转八进制
Stack s = new xxxStack();
while(num > 0) {
    s.push(num % 8);
    num = num / 8;
}

while(!s.isEmpty()) System.out.println(s.pop());


2. 括号匹配 {}, [], ()
思路也是一样的, 比如对于字符串 {(){[]}}
每读入一个字符, 与栈顶top进行比较, 看是不是匹配的另一半, 如果是则出栈, 如果不是则进栈。

3. 判断回文字符串
虽然Java API提供了相关的方法可以直接使用, 但其也有可能是基于栈来实现的(未核实, 需读源代码)。。。(已核实: 基于数组的直接交换。。。)
public static boolean isPlalindrome(String str){   
    return new StringBuffer(str).reverse().toString().equals(str);   
} 


【Update】StringBuffer的reverse方法实现, 部分代码:
private static void reverse(char[] value) {
	int n = value.length - 1;
	for (int j = (n - 1) >> 1; j >= 0; --j) {
		char temp = value[j];
		char temp2 = value[n - j];
		value[j] = temp2;
		value[n - j] = temp;
	}
}


那如果直接用栈又是如何来实现呢?
那就得分两种情况。
1) 字符串长度为偶数
2) 字符串长度为基数

当为偶数的时候, 只需要把前一半压栈, 然后再遍历后一半, 如果每一个值都和栈顶相同则出栈。 如果任何一个值不匹配, 则可以断定该字符串不是回文字符串。

而对于基数则只需要skip中间的那个字符就可以了, 其他的和偶数情况一致。

分享到:
评论
1 楼 huhu_long 2011-10-20  
补充1:

在二叉树遍历的时候,如果采取非递归的方式,则可以借助Stack来实现

比如先根遍历:
if (node == null)
	return;
Stack stack = new Stack();

while (node.left != null) {
	stack.push(node);
	System.out.print(node.value);
	node = node.left;
}

System.out.print(node.value);
node = (Node) stack.pop();

while (node != null) {
	node = node.right;
	while (node.left != null) {
		stack.push(node);
		System.out.print(node.value);
		node = node.left;
	}

	System.out.print(node.value);
	if (stack.empty())
		break;
	node = (Node) stack.pop();
}

相关推荐

    栈的应用----算术表达式求值程序

    栈的应用广泛,其中之一就是用于解决算术表达式的求值问题。本文将深入探讨如何利用栈来实现一个算术表达式求值的程序。 首先,我们要理解算术表达式的构成。一个基本的算术表达式可能包含数字、运算符(如加号"+...

    栈的应用 进制转换

    数据结构的重要算法应用 ,栈,进制转换,可用于计算的,栈的应用

    数据结构课程设计--栈的应用

    本课程设计的重点是探讨栈在解决实际问题,特别是表达式计算中的应用。 栈在表达式计算中的应用广泛,最常见的就是逆波兰表示法(Postfix Notation)或称后缀表达式。逆波兰表示法是一种没有括号的表达式表示方式,...

    【数据结构实验】栈的应用

    实验三 栈的应用 1.实验目的: 熟悉栈的定义,栈的特点以及栈的基本操作。能够根据实际情况选择合适的存储结构,解决实际问题。 2.实验内容: 对任意给定的一个中缀算术表达式,输出等价的后缀形式。

    栈的应用-c++

    在提供的压缩包文件`shiyan_3栈的应用`中,可能包含了实现这个功能的源代码,通过阅读和学习这些代码,你可以深入理解栈在实际问题中的应用,以及C++中如何使用栈数据结构来解决实际问题。这样的练习对于提升C++编程...

    栈的一些基本的应用与实现

    本主题将探讨栈的一些基本应用以及如何实现这些功能。 1. 符号就近匹配:在编程语言解析和编译过程中,符号就近匹配是常见的应用场景。例如,当解析括号、引号等配对符号时,我们可以通过栈来检查一对括号是否正确...

    c++栈的应用 栈类源代码 原创

    c++栈的应用 栈类源代码,实现了一个简单的栈类,有栈的基本功能。

    王道计算机考研栈,栈的应用

    栈的实现 链栈的实现 出栈,入栈,栈空 基于栈实现的判断括号配对程序 基于栈实现的中缀表达式转后缀表达式 基于栈实现的后缀表达式计算器

    数据结构作业栈的应用

    在这个“数据结构作业栈的应用”中,我们主要探讨了栈在三个具体场景下的应用:字符串逆序输出、括号匹配以及数学表达式求值。 1. **字符串逆序输出**: 在这个部分,我们使用栈来实现一个字符串的逆序。栈的基本...

    栈的应用 - 迷宫求解

    本项目“栈的应用 - 迷宫求解”深入展示了如何利用栈来解决实际问题,特别是解决迷宫问题。迷宫问题是一个经典的路径搜索问题,它在游戏开发、算法设计以及计算机图形学等领域都有广泛应用。 栈在迷宫求解中的作用...

    栈的实现和应用(实验报告+代码)

    本实验报告将探讨如何实现栈以及其在实际问题中的应用,包括自定义顺序栈、括号匹配检查和后缀表达式求值。 首先,我们来看“实现自己的顺序栈类”。顺序栈通常是在内存中连续分配的一段空间来存储元素,它的优点是...

    栈的各种应用

    在IT领域,栈的应用广泛且重要,特别是在处理递推问题和需要临时存储信息的场景中。本篇文章将深入探讨栈在表达式求值、括号匹配以及进制转换等经典算法中的应用。 1. **表达式求值**:在计算机科学中,中缀表达式...

    栈结构应用示例

    在计算机科学中,栈被广泛应用于各种场景,包括内存管理、函数调用、文本编辑和算法实现等。本篇文章将深入探讨栈结构的应用,并通过具体的示例来阐述其在进制转换和表达式求值中的作用。 一、栈的基本操作 1. **...

    栈的应用----数制转换(C/C++)

    【栈的应用——数制转换(C/C++)】 在计算机科学中,数制转换是一种常见的操作,用于在不同数值系统之间转换数字。本程序利用栈(Stack)这一数据结构来实现数制转换,主要涉及十进制到其他进制(如八进制、十六...

    数据结构中栈的应用.pdf

    在栈的应用实例中,日常生活中的许多行为也可以类比为栈的操作。例如,刷洗盘子时,先洗净的盘子被放置在栈顶,需要时从栈顶取下,符合后进先出的原则。通过这些实例,可以更直观地理解栈结构的特点与应用。 总结来...

    栈及其应用实验作业.

    栈在计算机科学中有着广泛的应用,特别是在算法实现、编译原理、操作系统等多个领域。 对于本实验而言,我们将重点学习栈的顺序存储结构和链式存储结构。顺序栈是指用一维数组来存储栈中的元素,它的优点是访问速度...

    06.栈的基本概念以及顺序栈的应用.ppt

    06.栈的基本概念以及顺序栈的应用.ppt

    栈的应用,后缀表达式

    ### 栈的应用与后缀表达式的解析 在计算机科学领域,数据结构中的栈是一种非常重要的线性数据结构,它遵循先进后出(Last In First Out, LIFO)的原则。栈在许多算法和程序设计中扮演着核心角色,尤其是在处理括号...

    算法栈的应用栈的实现

    **算法栈的应用与栈的实现** 栈是一种非常基础且重要的数据结构,被称为“后进先出”(Last In First Out, LIFO)的数据结构。在计算机科学中,栈被广泛应用于各种算法和问题解决中。栈的主要操作包括入栈(Push)...

    栈的应用——括号的匹配

    栈的应用广泛,其中之一就是处理括号的匹配问题,这在编程语言解析、编译器设计以及文本编辑器中都至关重要。本主题将深入探讨栈在括号匹配中的应用及其原理。 括号匹配问题源于我们日常编程中的表达式或代码块,...

Global site tag (gtag.js) - Google Analytics