• 数据结构与算法分析java——栈和队列


    1. 栈

    1.1 分类

      顺序栈:顺序线性表实现

      链式栈:单向链表存储堆栈

    1.2栈的应用

    1)数制转换

    import java.util.Scanner;
     
    import java.util.Stack;
     
    public class Tran{
     
        public static void main(String arg[]){
     
         Scanner y=new Scanner(System.in);
     
         System.out.println("请输入十进制数");
     
         int b=y.nextInt();
     
         Tran j=new  Tran();
     
         j.ErJinZhi(b);
     
         j.BaJinZhi(b);
     
         j.ShiLiuJinZhi(b);
     
        }
     
      //转化成二进制
     
      void ErJinZhi(int a){
     
        Stack<Integer> s=new Stack<Integer>();
     
        String str="";
     
        while(a>0)
     
        {
     
         s.push(a%2);
     
         a=a/2;
     
        }
     
        while(!s.isEmpty()){
     
         str=str+s.pop();
     
        }
     
      System.out.println("二进制是"+str);
     
      } 
     
      //转化成八进制
     
      void BaJinZhi(int a){
     
      Stack<Integer> s=new Stack<Integer>();
     
        String str="";
     
        while(a>0)
     
        {
     
         s.push(a%8);
     
         a=a/8;
     
        }
     
        while(!s.isEmpty()){
     
         str=str+s.pop();
     
        }
     
       System.out.println("八进制是"+str);
     
      }
     
      //转化成十六进制
     
      void ShiLiuJinZhi(int a){
     
       int c=0;
     
       String str="";
     
       Stack<Character> s=new Stack<Character>();
     
       while(a>0)
     
       {
     
        c=a%16;
     
        switch(c){
     
        case(10):s.push('A');break;
     
        case(11):s.push('B');break;
     
        case(12):s.push('C');break;
     
        case(13):s.push('D');break;
     
        case(14):s.push('E');break;
     
        case(15):s.push('F');break;
     
        default:s.push((char)(a%16+48));
     
        }
     
        a=a/16;
     
       }
     
       while(!s.isEmpty()){
     
        str=str+s.pop();
     
       }
     
       System.out.println("十六进制是"+str);
     
      }
     
    }
    View Code

    2)表达式的转换

    中缀表达式: a+b*c ;  前缀表达式: +a*bc;  后缀表达式: acb*+

      参考:  http://blog.csdn.net/antineutrino/article/details/6763722/

    3)递归

    4)递归的非递归实现

    2. 队列

    2.1 队列基本操作

    2.2 顺序队列 和链式队列

    3. Stack类

    import java.util.*;
    
    public class StackDemo {
    
       static void showpush(Stack st, int a) {
          st.push(new Integer(a));
          System.out.println("push(" + a + ")");
          System.out.println("stack: " + st);
       }
    
       static void showpop(Stack st) {
          System.out.print("pop -> ");
          Integer a = (Integer) st.pop();
          System.out.println(a);
          System.out.println("stack: " + st);
       }
    
       public static void main(String args[]) {
          Stack st = new Stack();
          System.out.println("stack: " + st);
          showpush(st, 42);
          showpush(st, 66);
          showpush(st, 99);
          showpop(st);
          showpop(st);
          showpop(st);
          try {
             showpop(st);
          } catch (EmptyStackException e) {
             System.out.println("empty stack");
          }
       }
    }
    stack: [ ]
    push(42)
    stack: [42]
    push(66)
    stack: [42, 66]
    push(99)
    stack: [42, 66, 99]
    pop -> 99
    stack: [42, 66]
    pop -> 66
    stack: [42]
    pop -> 42
    stack: [ ]
    pop -> empty stack
  • 相关阅读:
    Oracle关于快速缓存区应用原理
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext
    速记const 指针与指向const的指针
    bzoj3992【SDOI2015】序列统计
    ubuntu 1204 安装mysql
    解决getOutputStream() has already been called for this response
    把一个project相关的jar放到project的lib文件夹中
    解决eclipse偶尔无视breakpoint的行为
    解决eclipse无法打开:Failed to load the JNI shared library
    挣值管理公式集合
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/5417804.html
Copyright © 2020-2023  润新知