Java数据结构与算法之栈
来源:互联网 发布:java实现推荐算法实例 编辑:程序博客网 时间:2024/05/16 12:31
由于本身栈比较简单,故直接上代码。在代码中看相关知识
栈的代码如下:
//MyStack.java
package com.wayne.StackX;/* * 1, 栈只允许访问一个数据项,即最后插入的数据项。 * 2, 栈的特性:先进后出或者是后进先出。 * 3, 栈的出栈和入栈的时间复杂度都为常数O(1) * 4, 栈通常用于某种类型的字符串的逆序 */public class MyStack { //栈的三要素:数组、栈的最大长度、栈顶标记索引 /* * 数组charStack,目前先用数组实现,后期可用ADT实现长度不固定的栈 * 最大长度maxSize,由于采用数组方式存放数据,故只好先设置长度 * 栈顶标记索引,用于记录栈顶的位置(Java中没有指针定义,故尽量避免使用类似词语。) */ private char[] charStack; private int maxSize; private int top; /** * 初始化一个长度为length的空栈 * @param length 栈的预计长度 */ public MyStack(int length){ maxSize = length; charStack = new char[maxSize]; top = -1; } /** * 将一个元素elementChar压入栈中 * @param elementChar 等待被压入的栈 */ public void push(char elementChar){ charStack[++top] = elementChar; } /** * 将栈顶元素弹出栈 * @return 返回栈顶元素 */ public char pop(){ return charStack[top--]; } /** * 观察栈顶元素,将栈顶元素打印出来 */ public void peek(){ System.out.println(charStack[top]); } /** * 判断栈是否为空 * @return 如果为空,则返回true,如果不为空,则返回false */ public boolean isEmpty(){ return top == -1; } /** * 判断是否满栈 * @return 如果满,则返回true;如果没有满,则返回假 */ public boolean isFull(){ return top == maxSize-1; }}
再来两个例子
//字符逆序ReversLetterApp.java
package com.wayne.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import com.wayne.StackX.MyStack;public class ReversLetterApp { public static void main(String[] args) throws IOException { //封装键盘录入 BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String strInput = br.readLine(); //给一个屏幕提示 System.out.println("What you have entered is:"); System.out.println(strInput); //根据输入的字符串,初始化栈的最大值 MyStack myStack = new MyStack(strInput.length()); //将字符串中每一个字符取出,然后压入栈中 for(char chTemp:strInput.toCharArray()) { myStack.push(chTemp); } //从栈中取出每一个元素,并形成最后的目标串 //由于只是单线程,故可以使用StringBuilder,提高效率 StringBuilder sb = new StringBuilder(); while(!myStack.isEmpty()) sb.append(myStack.pop()); String resultStr = sb.toString(); //给出一个结果提示 System.out.println("after reversing,the result is:"); System.out.println(resultStr); }}
//括号匹配BracketMatchApp.java
package com.wayne.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import com.wayne.StackX.MyStack;public class ReversLetterApp { public static void main(String[] args) throws IOException { //封装键盘录入 BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String strInput = br.readLine(); //给一个屏幕提示 System.out.println("What you have entered is:"); System.out.println(strInput); //根据输入的字符串,初始化栈的最大值 MyStack myStack = new MyStack(strInput.length()); //将字符串中每一个字符取出,然后压入栈中 for(char chTemp:strInput.toCharArray()) { myStack.push(chTemp); } //从栈中取出每一个元素,并形成最后的目标串 //由于只是单线程,故可以使用StringBuilder,提高效率 StringBuilder sb = new StringBuilder(); while(!myStack.isEmpty()) sb.append(myStack.pop()); String resultStr = sb.toString(); //给出一个结果提示 System.out.println("after reversing,the result is:"); System.out.println(resultStr); }}
0 0
- Java数据结构与算法之栈
- Java数据结构与算法之stack栈
- 数据结构与算法之栈(Java与Python实现)
- 数据结构与算法之栈
- Java数据结构与算法:栈
- java数据结构与算法-栈
- Java数据结构与算法之栈和队列
- Java数据结构与算法之数组
- Java数据结构与算法之排序
- Java数据结构与算法之集合
- java数据结构与算法之概述
- Java数据结构与算法之年龄判断
- Java数据结构与算法之队列
- Java数据结构与算法之优先级队列
- java数据结构与算法分析之递归
- Java数据结构与算法之插入排序
- Java数据结构与算法之学习路线
- Java数据结构与算法之Array数组
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 单调队列优化dp
- org.springframework.dao.InvalidDataAccessApiUsageException
- SVN 备份和恢复
- Android Design 安卓官方设计文档中文翻译——第一部分:引导
- bones脚本篇 - 内置标签scroller
- Java数据结构与算法之栈
- DES SecretKeyFactory not available的处理
- alibaba/fastJson的使用
- 浅析spring mvc工作原理
- 斐波那契数列的非递归实现
- EasyUI tree菜单添加、删除、保存
- 使用thread类
- Java__向eclipse中添加user library的方式
- [Phonegap+Sencha Touch] 移动开发67 安卓实现 新版提示更新并下载安装(自动更新插件)