package stack; /** * @author Eightn0 * @create 2021-03-15 15:00 * 用动态链表实现堆栈 */ /*声明节点*/ class Node{ int data; Node next; public Node(int data) { this.data = data; this.next = null; } } /*用链表实现堆栈并设计压栈、出栈、判断栈是否为空的方法*/ class StackByLink{ public Node front;//指向栈底端的指针 public Node rear;//指向栈顶端的指针 /*判断栈是否为空:isEmpty()*/ public boolean isEmpty(){ return front == null;//通过底端指针是否为空判断栈是否为空 } /*打印堆栈内容:output_of_stack*/ public void output_of_stack(){ Node current = front;//从底端指针开始 while (current != null){//跳出循环的条件:打印完了 System.out.println("["+current.data+"]"); current=current.next;//指针下移,打印下一个 } System.out.println();//出于美观 } /*入栈——在顶端添加数据:insert*/ public void insert(int data){ Node newNode = new Node(data);//将要加入的数据装进节点 if (this.isEmpty()){//当前栈为空的话,那么顶端、底端指针都在新节点上 front = newNode; rear = newNode; }else {//当前栈非空,那么从顶端加入节点,让原来的顶端指向新节点,然后让顶端指针移动到新节点 rear.next = newNode; rear = newNode; } } /*出栈——在顶端删除数据:pop*/ public void pop(){ Node newNode; if (isEmpty()){//空栈不需要删数据 System.out.println("目前为空栈"); return; } newNode = front;//栈里只有一个数据 if (newNode == rear){ front = null; rear = null; System.out.println("目前为空栈");//删了就空了 }else {//比较一般的情形 while (newNode.next != rear){ newNode = newNode.next; } newNode.next = rear.next; rear = newNode; } } }
堆栈的动态数组实现
最新推荐文章于 2021-07-16 21:04:36 发布