卜若的代码笔记-数据结构系列-第十章:栈一.顺序栈(数组栈)

1.栈有两种写法,一种是以数组为躯干的顺序栈,一种是以链表为躯干的链式栈。

1.1栈的操作

1.1.1 出栈pop()函数

允许栈出,栈出之后,顶数据有移除操作。

时间复杂度o(1)

1.1.2 入栈push()函数

入栈,入栈之后,前一个数据网后呀。

时间复杂度o(1)

1.1.3 顶数据获取:peek()函数

不会做数据的移除。

时间复杂度o(1)

1.1.4 判空函数len()

当用于遍历的时候,需要知道判空的终止节点。

 

1.1.5 元素获取:search(int index)

获取节点的某个元素。

时间复杂度o(1);

 

2.我们来实现一个顺序栈

我们已经知道了上述方法,还是得建立一个继承体系。

先写一个接口叫IStack

public interface IStack<T> {

    void push(T t);
    T pop();
    T peek();
    T search(int index);
    int len();
}

然后实现这个接口

package com.stack.order;

import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

public class OrderLinkStack<T> implements IStack<T>{


    public OrderLinkStack(int index){

        tArray = (T[])new Object[index];

    }
    T[] tArray;
    int pointer = 0;


    @Override
    public void push(T t) {
        tArray[pointer] = t;
        pointer++;
    }

    @Override
    public T pop() {
        return tArray[--pointer];
    }

    @Override
    public T peek() {
        return tArray[pointer - 1];
    }

    @Override
    public T search(int index) {
        return tArray[index];
    }

    @Override
    public int len() {
        return pointer;
    }

}

我们写一个Int类型的栈

public class IntOrderLinkStack extends OrderLinkStack<Integer> {
    public IntOrderLinkStack(int index) {
        super(index);
    }
}

然后测试这个栈

测试结果

3.数组栈的问题

不能自动扩容,有个容量峰值。这点不太好。当然,这也是种访问机制。search的时候,时间复杂度为o(1)这一点就相当爽了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值