2022-07-26

栈和队列

栈和队列是两种 操作受限的线性表
这种 受限表现在:
栈的输入和删除只允许在 表的尾端进行(在栈中有一个名次叫做"栈顶"),规则  FIFO:FIRST IN LAST OUT
队列只允许在表尾插入元素,在表头删除元素, FIFO:FIRST IN FIRST OUT

栈与队列的相同点

  1. 都是线性结构
  2. 插入操作都是在表尾进行
  3. 都可以通过顺序结构和链式结构实现

注意


这里的栈和队列我使用了单链表Node类和SuperLinked类来实现机制

Node类

SuperLinked类

public class Stack {

    private SuperLinked superLinked = new SuperLinked();

    public void push(Integer item) {
        superLinked.add(item);
    }

    public void peek() {
        System.out.println(superLinked.getLast().getData());
    }

    public void pop() {
        superLinked.delLast();
    }

    public boolean empty() {
        return superLinked.getSize() == 0;
    }
}

队列

public class Queue {

    private SuperLinked superLinked = new SuperLinked();

    public void add(Integer item) {
        superLinked.add(item);
    }

    public Integer poll() {
        if (superLinked == null) {
            return -1;
        }
        int temp = superLinked.getNode(0).getData();
        superLinked.delTop();
        return temp;
    }

    public boolean empty() {
        return superLinked.getSize() == 0;
    }
}

注意


我整个栈和队列的机制都非常简单
没有做异常处理,即超出范围的操作,正常使用是没有任何问题的


运用队列的实例程序

制作了一个银行实例程序,只有简单的取票和叫号机制
当所有号码全部取出后,可以继续输入要发出的账号
public class BankTicketMachine { private Queue queue = new Queue(); private int startNumber = 100; private Scanner scanner = new Scanner(System.in); public Integer getTicket() { if (queue.empty()) { System.out.println("号码已经全部领取,需要继续释放号码!"); System.out.println("请输入释放号码的个数:"); int number = scanner.nextInt(); pushTicket(number); } return queue.poll(); } public void pushTicket(int ticketNumber) { for (int i = 0; i < ticketNumber; i++) { startNumber+=1; queue.add(startNumber); } } public void run() { while (true) { System.out.println("请输入你的名字"); String name = scanner.next(); Integer ticket = getTicket(); System.out.println("尊敬的「"+name+"」,你的号码是:+"+ticket); } } public static void main(String[] args) { new BankTicketMachine().run(); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值