实现一个简易的栈

栈的原则是先进后出,包括push,pop,peek,isEmpty和size方法.

package Test;

public class StactTest {
    private int[] array = new int[100];
    private int size = 0;

    //push方法
    public void push(int var){
        array[size++] = var;
    }

    //pop方法
    public int pop(){
        return array[--size];
    }

    //获取栈顶元素
    public int peek(){
        return array[size - 1];
    }

    //判定栈是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    //获取栈的大小
    public int size(){
        return size;
    }

    public static void main(String[] args){
        StactTest stact = new StactTest();
        stact.push(1);
        stact.push(2);
        stact.push(3);
        stact.push(4);
        while(!stact.isEmpty()){
            System.out.println("栈顶元素:");
            int ret = stact.peek();
            System.out.println(ret);
            System.out.println("出栈元素:");
            System.out.println(stact.pop());
        }

    }
}
### 用数组实现简易结构 在使用数组实现结构时,可以通过一个变量 `top` 来跟踪顶元素的位置。的基本操作包括: - **push**:将元素压入顶,`top` 增加 1。 - **pop**:移除顶元素,`top` 减少 1。 - **peek**:查看顶元素,不修改。 ```python class Stack: def __init__(self, capacity): self.stack = [None] * capacity self.top = -1 self.capacity = capacity def push(self, item): if self.top < self.capacity - 1: self.top += 1 self.stack[self.top] = item else: raise Exception("Stack overflow") def pop(self): if self.top >= 0: item = self.stack[self.top] self.top -= 1 return item else: raise Exception("Stack underflow") def peek(self): if self.top >= 0: return self.stack[self.top] else: raise Exception("Stack is empty") ``` ### 用链表实现简易结构 链表实现时,通常使用单链表,并且所有操作都在链表的头部进行(时间复杂度为 O(1))。每个节点包含数据和指向下一个节点的指针。 ```python class Node: def __init__(self, data): self.data = data self.next = None class Stack: def __init__(self): self.head = None def push(self, item): new_node = Node(item) new_node.next = self.head self.head = new_node def pop(self): if self.head is not None: item = self.head.data self.head = self.head.next return item else: raise Exception("Stack is empty") def peek(self): if self.head is not None: return self.head.data else: raise Exception("Stack is empty") ``` ### 数组与链表实现的对比 | 特性 | 数组实现 | 链表实现 | |--------------------|-----------------------------------|-----------------------------------| | **内存分配** | 静态分配,需要提前指定容量 | 动态分配,无需提前指定容量 | | **时间复杂度** | `push`、`pop`、`peek` 均为 O(1) | `push`、`pop`、`peek` 均为 O(1) | | **空间复杂度** | O(n),需预留固定空间 | O(n),按需分配 | | **扩展性** | 容量受限,扩展困难 | 可动态扩展 | | **实现复杂度** | 实现简单,逻辑清晰 | 实现稍复杂,涉及指针操作 | 数组实现适合已知最大容量的情况,而链表实现则更加灵活,能够动态调整大小[^1]。 ### 相关问题 1. 的 `push` 和 `pop` 操作的时间复杂度是多少? 2. 为什么链表实现更适合动态调整大小? 3. 在数组实现中,如何处理满的情况? 4. 的链表实现中,为什么选择在链表头部进行操作? 5. 的 `peek` 操作有什么作用?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值