Java数据结构与算法之栈

Dear 丶 2022-08-09 12:44 352阅读 0赞

由于本身栈比较简单,故直接上代码。在代码中看相关知识
栈的代码如下:
//MyStack.java

  1. package com.wayne.StackX;
  2. /* * 1, 栈只允许访问一个数据项,即最后插入的数据项。 * 2, 栈的特性:先进后出或者是后进先出。 * 3, 栈的出栈和入栈的时间复杂度都为常数O(1) * 4, 栈通常用于某种类型的字符串的逆序 */
  3. public class MyStack {
  4. //栈的三要素:数组、栈的最大长度、栈顶标记索引
  5. /* * 数组charStack,目前先用数组实现,后期可用ADT实现长度不固定的栈 * 最大长度maxSize,由于采用数组方式存放数据,故只好先设置长度 * 栈顶标记索引,用于记录栈顶的位置(Java中没有指针定义,故尽量避免使用类似词语。) */
  6. private char[] charStack;
  7. private int maxSize;
  8. private int top;
  9. /** * 初始化一个长度为length的空栈 * @param length 栈的预计长度 */
  10. public MyStack(int length){
  11. maxSize = length;
  12. charStack = new char[maxSize];
  13. top = -1;
  14. }
  15. /** * 将一个元素elementChar压入栈中 * @param elementChar 等待被压入的栈 */
  16. public void push(char elementChar){
  17. charStack[++top] = elementChar;
  18. }
  19. /** * 将栈顶元素弹出栈 * @return 返回栈顶元素 */
  20. public char pop(){
  21. return charStack[top--];
  22. }
  23. /** * 观察栈顶元素,将栈顶元素打印出来 */
  24. public void peek(){
  25. System.out.println(charStack[top]);
  26. }
  27. /** * 判断栈是否为空 * @return 如果为空,则返回true,如果不为空,则返回false */
  28. public boolean isEmpty(){
  29. return top == -1;
  30. }
  31. /** * 判断是否满栈 * @return 如果满,则返回true;如果没有满,则返回假 */
  32. public boolean isFull(){
  33. return top == maxSize-1;
  34. }
  35. }

再来两个例子
//字符逆序ReversLetterApp.java

  1. package com.wayne.test;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import com.wayne.StackX.MyStack;
  6. public class ReversLetterApp {
  7. public static void main(String[] args) throws IOException {
  8. //封装键盘录入
  9. BufferedReader br = new BufferedReader(
  10. new InputStreamReader(System.in));
  11. String strInput = br.readLine();
  12. //给一个屏幕提示
  13. System.out.println("What you have entered is:");
  14. System.out.println(strInput);
  15. //根据输入的字符串,初始化栈的最大值
  16. MyStack myStack = new MyStack(strInput.length());
  17. //将字符串中每一个字符取出,然后压入栈中
  18. for(char chTemp:strInput.toCharArray())
  19. {
  20. myStack.push(chTemp);
  21. }
  22. //从栈中取出每一个元素,并形成最后的目标串
  23. //由于只是单线程,故可以使用StringBuilder,提高效率
  24. StringBuilder sb = new StringBuilder();
  25. while(!myStack.isEmpty())
  26. sb.append(myStack.pop());
  27. String resultStr = sb.toString();
  28. //给出一个结果提示
  29. System.out.println("after reversing,the result is:");
  30. System.out.println(resultStr);
  31. }
  32. }

//括号匹配BracketMatchApp.java

  1. package com.wayne.test;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import com.wayne.StackX.MyStack;
  6. public class ReversLetterApp {
  7. public static void main(String[] args) throws IOException {
  8. //封装键盘录入
  9. BufferedReader br = new BufferedReader(
  10. new InputStreamReader(System.in));
  11. String strInput = br.readLine();
  12. //给一个屏幕提示
  13. System.out.println("What you have entered is:");
  14. System.out.println(strInput);
  15. //根据输入的字符串,初始化栈的最大值
  16. MyStack myStack = new MyStack(strInput.length());
  17. //将字符串中每一个字符取出,然后压入栈中
  18. for(char chTemp:strInput.toCharArray())
  19. {
  20. myStack.push(chTemp);
  21. }
  22. //从栈中取出每一个元素,并形成最后的目标串
  23. //由于只是单线程,故可以使用StringBuilder,提高效率
  24. StringBuilder sb = new StringBuilder();
  25. while(!myStack.isEmpty())
  26. sb.append(myStack.pop());
  27. String resultStr = sb.toString();
  28. //给出一个结果提示
  29. System.out.println("after reversing,the result is:");
  30. System.out.println(resultStr);
  31. }
  32. }

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据结构算法-

    什么是栈 栈又称为堆栈,是一种运算受限定表。说是限定表是由于对于元素的入栈和出栈都在表末尾进行,换言之就是先进后出,其本质就是对表尾部元素进行操作。在计算机系统中,栈是具有

    相关 数据结构算法

    数据结构与算法 栈 一、简述       栈是一种只能在一端进行插入或删除操作的线性表。进行插入、删除的一端称为栈顶,栈顶的当前位置是动态的,由一个称为栈顶指针的位置指

    相关 数据结构算法

    前言 在前面几篇我们有讲到数组,链表等数据结构,这些都是存储数据的最基本的结构。而本篇文章讲解的则是利用算法和数据结构来实现一些小工具,来解决现实中某种需求。它就是栈。