栈和队列以及简单应用

栈和队列的实现以及简单应用
摘要由CSDN通过智能技术生成

栈和队列

栈的概念和实现

栈的概念

栈是一种特殊的线性表,它只允许在其固定的一端进行插入和删除操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵循先入后出的规则。
栈的插入也叫入栈、压栈、进栈。是将入栈元素存放在栈顶,栈顶元素变更为新存放的元素。
栈的删除也叫出栈。是将栈顶元素删除。栈顶元素变为删除后的栈顶元素的下一个元素。

栈的基本操作

栈的操作一般常用的为初始化,入栈,出栈,获取栈顶元素,判断栈是否为空,判断栈是否已满。这些操作代码将会在栈的实现中出现。

用链表和顺序表实现栈

栈的实现主要可以靠顺序表或者链表来实现。但是由于是在队尾操作,所以根据顺序表和链表的特性,一般顺序表实现比较简单。

顺序表实现栈
import java.util.Arrays;

public class MyStack {
   
//顺序表的底层是数组,因此使用数组来存储栈元素;
    public int [] elem;
    public int top;//用来获取栈的长度,防止数组越界异常。

    public MyStack(){
   //构造栈
        elem = new int [10];
        top = 0;
    }

    public boolean isFull(){
   //判满
        if(top == elem.length){
   
            return true;
        }else{
   
            return false;
        }
    }
    public void push(int val){
   //入栈操作
        if(isFull()){
   //扩容
            Arrays.copyOf(elem , elem.length * 2);
        }
        elem[top] = val;
        top++;
    }

    public int pop() {
   //出栈
        if(empty()){
   
            return -1;
        }
        int ret = elem[top - 1];
        top--;
        return ret;
    }

    public boolean empty(){
   //判空
        if(top == 0){
   
            return true;
        }else{
   
            return false;
        }
    }

    public int peek(){
   //获取栈顶元素
        if(empty()){
   
            return -1;
        }
        return this.elem[this.top - 1];
    }
}
链表实现栈
class StackNode{
   
    public int value;//存放的数据
    public StackNode next;//指向下一个节点
    public StackNode(int val){
   //构造函数
        value = val;
    }
}
public class MyStack {
   
    public StackNode front;
    public StackNode rear;
    public int usedSize = 0;

    public void push(int num){
   //入栈
        StackNode stackNode = new StackNode(num);
        if(front == null){
   
            front = stackNode;
            rear = stackNode;
        }else{
   
            rear.next = stackNode;
            rear = stackNode;
        }
        usedSize++;
    }

    public int pop(){
   //出栈
        if(empty()){
   
            return -1;
        }
        int ret = rear.value;
        if(usedSize == 1){
   
            front = null;
            rear = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值