数据结构与算法

数据结构与算法(五,栈和栈的应用,递归思想)

2019-01-25  本文已影响20人  腊鸡程序员

栈是只在尾部做添加和删除的线性表

栈的顺序结构方式
public synchronized void addElement(E obj) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = obj;
    }

首先判断是否需要扩容
然后将elementCount位置即栈顶指针指向的位置,赋值为obj
然后将elementCount++,即栈顶指针上移一格,指向一格空地址

 elementCount--;
 elementData[elementCount] = null; /* to let gc do its work */

首先将栈顶指针下移一格
然后将指针所指向的位置置空

栈的链式结构方式

栈在计算机中的应用

  1. 链表的倒序
    将链表存放到链式结构的栈中,进行入栈操作
s = first;//将链表头结点入栈
stack.top = s;
first = first.next();
  1. 逆波兰表达式-->中缀表达式-->后缀表达式-->计算方式
    9+(3-1)X3+10/2
    标准四则运算表达式是中缀表达式

递归的思想

阶乘
  public Long jc (int n){
        if (n<=1){
            return 1l;
        }else {
            return n*jc(n-1);
        }
    }
斐波那契数列

1 1 2 3 5 8
除前两项外,其他项等于前两项之和

   public int fibonaaci(int n){
        if (n<=1){
            return 1;
        }else {
            return fibonaaci(n-2)+fibonaaci(n-1);
        }
    }
汉诺塔

将问题简化成两块砖(n1,n2),3根柱子(start,middle,end)
现将n2移动到middle,再将n1移动到end,再将n2移动到end

public void hannoi(int n,int start,int middle,int end){
        if (n<=1){
            System.out.println(start+"--->"+end);
        }else {
            hannoi(n-1,start,end,middle);
            System.out.println(start+"--->"+end);
            hannoi(n-1,middle,start,end);
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读